我想在我的网址中用破折号分隔单词.所以代替:
/MyController/MyAction
Run Code Online (Sandbox Code Playgroud)
我想要:
/My-Controller/My-Action
Run Code Online (Sandbox Code Playgroud)
这可能吗?
Cha*_*adT 149
您可以像这样使用ActionName属性:
[ActionName("My-Action")]
public ActionResult MyAction() {
return View();
}
Run Code Online (Sandbox Code Playgroud)
请注意,您需要调用View文件"My-Action.cshtml"(或相应的扩展名).您还需要在任何Html.ActionLink方法中引用"my-action".
控制器没有这么简单的解决方案.
全局启用路由:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
// routes.MapRoute...
}
Run Code Online (Sandbox Code Playgroud)
现在使用MVC5,属性路由已经被吸收到项目中.您现在可以使用:
[Route("My-Action")]
Run Code Online (Sandbox Code Playgroud)
论行动方法.
对于控制器,您可以应用RoutePrefix将应用于该控制器中所有操作方法的属性:
[RoutePrefix("my-controller")]
Run Code Online (Sandbox Code Playgroud)
使用的一个好处RoutePrefix是URL参数也将传递给任何动作方法.
[RoutePrefix("clients/{clientId:int}")]
public class ClientsController : Controller .....
Run Code Online (Sandbox Code Playgroud)
剪断..
[Route("edit-client")]
public ActionResult Edit(int clientId) // will match /clients/123/edit-client
Run Code Online (Sandbox Code Playgroud)
And*_*rew 15
您可以创建一个自定义路由处理程序,如以下博客所示:
http://blog.didsburydesign.com/2010/02/how-to-allow-hyphens-in-urls-using-asp-net-mvc-2/
public class HyphenatedRouteHandler : MvcRouteHandler{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
return base.GetHttpHandler(requestContext);
}
}
Run Code Online (Sandbox Code Playgroud)
......和新路线:
routes.Add(
new Route("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Default", action = "Index", id = "" }),
new HyphenatedRouteHandler())
);
Run Code Online (Sandbox Code Playgroud)
这里提出了一个非常相似的问题:ASP.net MVC支持带有连字符的URL
Ata*_* S. 11
我已经为这个问题开发了一个开源的NuGet库,它隐式地将EveryMvc/Url转换为每个mvc/url.
大写网址是有问题的,因为Cookie路径区分大小写,大多数互联网实际上区分大小写,而Microsoft技术将网址视为不区分大小写.(更多关于我的博文)
NuGet包:https://www.nuget.org/packages/LowercaseDashedRoute/
要安装它,只需在Visual Studio中打开NuGet窗口,右键单击Project并选择NuGet Package Manager,然后在"Online"选项卡上键入"Lowercase Dashed Route",它就会弹出.
或者,您可以在程序包管理器控制台中运行此代码:
Install-Package LowercaseDashedRoute
之后你应该打开App_Start/RouteConfig.cs并注释掉现有的route.MapRoute(...)调用并添加它:
routes.Add(new LowercaseDashedRoute("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
new DashedRouteHandler()
)
);
Run Code Online (Sandbox Code Playgroud)
而已.所有的网址都是小写,虚线和隐式转换,而不需要你做更多的事情.
开源项目网址:https://github.com/AtaS/lowercase-dashed-route
这是我使用ASP.NET MVC 5中的区域所做的,它的工作很有魅力.我也没有必要重新命名我的观点.
在RouteConfig.cs中,执行以下操作:
public static void RegisterRoutes(RouteCollection routes)
{
// add these to enable attribute routing and lowercase urls, if desired
routes.MapMvcAttributeRoutes();
routes.LowercaseUrls = true;
// routes.MapRoute...
}
Run Code Online (Sandbox Code Playgroud)
在控制器中,在类定义之前添加:
[RouteArea("SampleArea", AreaPrefix = "sample-area")]
[Route("{action}")]
public class SampleAreaController: Controller
{
// ...
[Route("my-action")]
public ViewResult MyAction()
{
// do something useful
}
}
Run Code Online (Sandbox Code Playgroud)
如果在本地计算机上进行测试,则显示在浏览器中的URL为:localhost/sample-area/my-action.您无需重命名视图文件或任何内容.我对最终结果非常满意.
启用路由属性后,您可以删除所有区域注册文件,例如SampleAreaRegistration.cs.
这篇文章帮助我得出了这个结论.我希望它对你有用.
| 归档时间: |
|
| 查看次数: |
23013 次 |
| 最近记录: |