2010-12-03 5 views
0

Asp.net 3,5 IIS 7 NHibernet www.sample.com Сайт размещенный в виртуальном каталогеASP.NET MVC 2.0 IIS 7.0 и 404 ошибка

Его генерировать URL, как «/ образец/дома/индекс "вместо„/ дома/индекс“

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

действия работают нормально, но только когда я вернусь Json (данные) он возвращает 404. Я пробовал wi го как 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); 
    } 

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

[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.

ответ

0

Ваше приложение в папке вирт под названием «образец», а не в корневом каталоге сайта.

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

+0

Нет мой клиент главный сайт работает на корню, так что я не могу перенести его в корень. Я обычно демонстрирую свою работу над своим собственным доменом в качестве поддомена, например, «http://client.wayzsoft.com», поскольку я никогда не встречал «wayzsoft» или «клиент» в сгенерированных URL-адресах. Как я думаю, даже поддомен также размещен как виртуальный каталог. Во-вторых, у меня проблема с JsonResult не с ActionResult и контентом – 2010-12-04 09:22:00

2

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

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

к:

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

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

Вместо:

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

}); 

Do:

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

}); 
+0

Спасибо вам за ответ, но InvalidRequestOrRecordNotFound - это вид, я просто перенаправляю на просмотр. для URL, я строго пользователь Url.Action. – 2010-12-04 13:20:18