Как предотвратить исключение System.NotSupportedException: формат указанного пути не поддерживается - PullRequest
1 голос
/ 17 мая 2011

Когда используется неверный URL и все символы принимаются - либо с использованием реестра ключей .config (см. Другие сообщения «дубликаты» для получения дополнительной информации), сбой asp.net mvc.

Что такоелучшая точка перехвата для предотвращения / обработки исключения?

Примеры URL-адресов

http://www.local.com/some/url/pagehttp://www.local.com/some/url/page
http://www.local.com/some/url/page:12

Пример исключения

System.NotSupportedException Формат указанного пути не поддерживается.

at System.Security.Util.StringExpressionSet.CanonicalizePath(String path, Boolean needFullPath) 
at System.Security.Util.StringExpressionSet.CreateListFromExpressions(String[] str, Boolean needFullPath) 
at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList) 
at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList) 
at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String path) 
at System.Web.HttpRequest.MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, Boolean allowCrossAppMapping) 
at System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage) 
at System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) 
at System.Web.Mvc.ViewPage.RenderView(ViewContext viewContext) 
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) 
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() 
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) 
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) 
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) 
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)

1 Ответ

1 голос
/ 17 мая 2011

Исправлено.

Добавьте это к вашему Application_Start:

filters.Add(new MyHandleErrorAttribute { Order = 1, ExceptionType = typeof(NotSupportedException) });

И поместите этот класс в свой проект:

public class MyHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute {
  public override void OnException(ExceptionContext filterContext) {
     if (filterContext.IsChildAction || filterContext.ExceptionHandled || !ExceptionType.IsInstanceOfType(exception) || exception.Message != "The given path's format is not supported." ) 
       return;
  }

  base.OnException(filterContext);
  filterContext.HttpContext.Response.StatusCode = 404;
}

Тогда вы можете обработать 404 вВаш Application_Error.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...