asp.net-mvc – 创建自定义RouteBase类
|
我想知道下面代码中HttpContext.Request.AppRelativeCurrentExecutionFilePath的功能是什么.请解释路由系统如何匹配请求的URL: public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData result = null;
string requestedURL = string.Empty;
for (int i = 0; i < urls.Length; i++)
{
if(httpContext.Request.AppRelativeCurrentExecutionFilePath.Contains(urls[i]))
{
requestedURL = httpContext.Request.AppRelativeCurrentExecutionFilePath;
break;
}
}
if (!string.IsNullOrEmpty(requestedURL))
{
result = new RouteData(this,new MvcRouteHandler());
result.Values.Add("controller","CustomRoute");
result.Values.Add("action","DirectCustomUrls");
result.Values.Add("customUrl",requestedURL);
}
return result;
}
解决方法路由系统 works like a switch-case statement.匹配wins的第一个路由以及之后注册的所有路由将被忽略.因此,每个路由都没有一个,而是三个单独的责任(无论路由是传入的HTTP请求还是传出的URL生成): >匹配请求. 您发布的代码完成了所有这三项任务. 匹配请求 string requestedURL = string.Empty;
for (int i = 0; i < urls.Length; i++)
{
if(httpContext.Request.AppRelativeCurrentExecutionFilePath.Contains(urls[i]))
{
requestedURL = httpContext.Request.AppRelativeCurrentExecutionFilePath;
break;
}
}
if (!string.IsNullOrEmpty(requestedURL))
{
上面的代码通过检查URL值数组来匹配请求.基本上,它说的是“如果数组包含当前请求的URL,那么它就是匹配”. 实际检查它是否匹配是行if(!string.IsNullOrEmpty(requestedURL)),如果URL包含默认值String.Empty以外的值,则允许条件通过. 提供一组路线值 result = new RouteData(this,new MvcRouteHandler());
result.Values.Add("controller","CustomRoute");
result.Values.Add("action","DirectCustomUrls");
result.Values.Add("customUrl",requestedURL);
上面的代码创建了一个新的RouteData对象,该对象由标准的MvcRouteHandler支持. 然后它填充结果的路由值.对于MVC,需要控制器和操作,并且值可能包含其他内容,如主键,当前文化,当前用户等. 返回null RouteData result = null;
// <snip>
if (!string.IsNullOrEmpty(requestedURL))
{
// <snip>
}
return result;
上面的代码设置了一个模式,以确保当路由与请求不匹配时,返回的结果为null. 这一步非常重要.如果在不匹配的情况下不返回null,则路由引擎将不检查在当前路由之后注册的任何路由. 考虑这个路由配置: public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new CustomRoute());
routes.MapRoute(
name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional }
);
}
}
如果在传入请求与路由不匹配的情况下CustomRoute未能返回null,则路由框架将永远不会检查默认路由.这使得CustomRoute非常不灵活,因为它无法在配置中的任何其他路由之前注册. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在MVC Web应用程序中的存储库中共享DbConte
- asp.net-mvc – 条件ASP.NET MVC剃刀部分
- 在ASP.NET 4.5 WebForms中通过bundle.config和BundleConfig
- asp.net-mvc – 使用复杂类型嵌套对象的bind属性include和e
- asp.net – Nlog不创建相对于网站项目的文件
- asp.net-mvc – 其中Simple Injector等效于StructureMap的O
- asp.net-mvc – Durandal和ASP.NET MVC约定
- asp.net – 使用ASP:文本框作为
- asp.net-mvc – 异步HttpModule MVC
- 最佳实践:ASP.NET中的CSS或主题?
- UnitOfWork知多少
- asp.net – 从请求中获取所有发布数据
- asp.net – HttpError iis config在添加默认路径
- attributes – 利用属性版本控制在Swagger中利用
- asp.net-mvc – MVC Ajax.Beginform OnComplete
- webmatrix – ASP.NET页面中的_PageStart.cshtml
- asp.net-mvc – ASP.NET MVC是否需要安装在我的生
- .net – Application_Error不会触发?
- asp.net – 有谁知道如何摆脱我的.net网络服务的
- asp.net – ASP:NET确认密码字段
