ASP.NET MVC 2.0 IIS 7.0 и 404 ошибка - PullRequest
0 голосов
/ 04 декабря 2010

Asp.net 3.5 IIS 7 NHibernet www.sample.com Сайт размещен в виртуальном каталоге

Генерирует URL, например "/ sample / home / index" вместо "/ home / index"

хорошо, приложение работает с указанным выше URL, но когда я вызываю любые данные Ajax, такие как casecade dropdwonlist, я возвращаю 404.

Действия работают нормально, но только когда я возвращаю Json (данные), он возвращает 404. Я пытался с GET и POST

код

    [HttpPost]
    public ActionResult GetSubCategories2(int id)
    {
        var data = from subCat in CategoryService.GetChildByParentCategory(
            CategoryService.GetCategoryByID(id))
                   select new { Value = subCat.ID, Text = subCat.CategoryName };

        return Json(data);
    }

У меня есть один фильтр безопасности и обработчик ошибок

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method
    , Inherited = true, AllowMultiple = false)]
public class HandelRecordNotFound : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext.Exception.Message.IndexOf("No row with the given identifier exists") > -1)
        {
            //filterContext.HttpContext.Response.Redirect("~/Admin/InvalidRequestOrRecordNotFound");
            filterContext.Result = new RedirectResult("~/Admin/InvalidRequestOrRecordNotFound");
            filterContext.ExceptionHandled = true;
        }

        if (filterContext.Exception.Message.IndexOf("The DELETE statement conflicted") > -1)
        {
            //filterContext.HttpContext.Response.Redirect("~/Admin/InvalidRequestOrRecordNotFound");
            filterContext.Result = new RedirectResult("~/Admin/InvalidRequestOrRecordNotFound");
            filterContext.ExceptionHandled = true;
        }
        //filterContext.Exception.Message 

    }
}

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method
    , Inherited = true, AllowMultiple = false)]
public class AdminAuthorization : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        base.AuthorizeCore(httpContext);
        object userTypeObject = httpContext.Session["UserType"];

        if (userTypeObject == null ||
            (UserTypes)Enum.ToObject(typeof(UserTypes), userTypeObject) != UserTypes.Administrator)
        {
            return false;
        }
        return true;
    }
}

За исключением вышесказанного, все нормально.

все отлично работает на стороне клиента, но на сервере метод JsonResult возвращает ошибку 404.

Ответы [ 2 ]

2 голосов
/ 04 декабря 2010

Первое замечание о вашем фильтре действий: измените

filterContext.Result = new RedirectResult("~/Admin/InvalidRequestOrRecordNotFound");

на:

var routes = new RouteValueDictionary(
    new { controller = "admin", action = "InvalidRequestOrRecordNotFound" }
);
filterContext.Result = new RedirectToRouteResult(routes);

Второе замечание касается того, как вы называете свои действия ajax.Вы всегда должны использовать помощники по URL для создания правильных маршрутов и никогда не кодировать их жестко в своих скриптах.Пример:

Вместо:

$.get('/home/someajax', function(result) { 

});

Do:

$.get('<%= Url.Action("someajax") %>', function(result) { 

});
0 голосов
/ 04 декабря 2010

Ваше приложение установлено в папке virt, называемой «sample», а не в корне сайта.

Переместите приложение, настройте маршруты или используйте правильный URL-адрес, включая префикс «/ sample /».

...