任何人都可以向我解释属性路由。我对此有疑问。
当我使用"只有"属性路由我遇到错误。
HTTP错误403.14 - 禁止将Web服务器配置为不列出 这个目录的内容。
HTTP错误404.0 - 未找到您正在寻找的资源 删除,更改名称或暂时不可用。
我在控制器中的代码:
[RoutePrefix("MyHome/{action}")]
public class IndexController : Controller
{
[Route("HomeAction")]
public ActionResult Index()
{
return View();
}
[Route("CallUs")]
public ViewResult ContactUs()
{
return View();
}
}
在RouteConfig.cs
看起来像:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
}
网址有什么问题吗?
我尝试过不同的方式:
http://localhost:51254/Index
http://localhost:51254/Index/Index
http://localhost:51254/HomeAction
http://localhost:51254/MyHome/HomeAction
所以,如果我重新提出问题那么它就像是:
是否必须使用基于约定的路由和objRouteCollection.mapRoute
方法?
因为如果我添加MapRoute
方法,它的效果非常好。
我搜索过但无法找到能回答我问题的内容。例如msdn,c-SharpCorner
答案 0 :(得分:2)
当使用Route属性修饰操作方法时,无法再从RouteConfig.cs中定义的基于约定的路径访问该方法
MVC期望RoutePrefix中的文字字符串,否则会产生运行时错误。实际错误:"操作方法的直接路由不能使用参数' action'。指定文字路径代替此参数以创建到操作的路径。" 所以从RoutePrefix中删除{action}。 现在,如果您访问' http://localhost:xxxxx/MyHome/HomeAction',它应该有用。