C# MVC-默认控制器
我正在创建一个网站,我想有动态添加的网页。因此,我希望有一个更简单的URL。我的目标是创建如下URL:C# MVC-默认控制器,c#,asp.net-mvc,C#,Asp.net Mvc,我正在创建一个网站,我想有动态添加的网页。因此,我希望有一个更简单的URL。我的目标是创建如下URL: http://www.mysite.com/my-page-url http://www.mysite.com/pageController/my-page-url 而不是像下面这样的URL: http://www.mysite.com/my-page-url http://www.mysite.com/pageController/my-page-url MVC url通常是这样工作
http://www.mysite.com/my-page-url
http://www.mysite.com/pageController/my-page-url
而不是像下面这样的URL:
http://www.mysite.com/my-page-url
http://www.mysite.com/pageController/my-page-url
MVC url通常是这样工作的:|url |/| controller |/| action |/| params |
我想做的是:| url |/| params |
对于上面的URL,如果参数的值不等于控制器的名称,那么我希望使用MVC的默认路由方案,
http://www.mysite.com/my-page-url
将转到我的页面url
控制器中的索引操作。如果要设置默认控制器和操作,可以在Global.asax.cs文件中将其设置为:
routes.MapRoute(
"Default", // Route name
"{action}/{pageName}", // URL with parameters
new { controller = "PageContoller", action = "ProcessDynamicPage", pageName = "" } // Parameter defaults
);
更新
如果您需要支持其他路线,您可以使用Mark Oreta建议的方法创建它们。查看并使用MVC的默认路由方案,
http://www.mysite.com/my-page-url
将转到我的页面url
控制器中的索引操作。如果要设置默认控制器和操作,可以在Global.asax.cs文件中将其设置为:
routes.MapRoute(
"Default", // Route name
"{action}/{pageName}", // URL with parameters
new { controller = "PageContoller", action = "ProcessDynamicPage", pageName = "" } // Parameter defaults
);
更新
如果您需要支持其他路线,您可以使用Mark Oreta建议的方法创建它们。查看并查看。在IIS 7中,您需要查看处理程序映射。您可以指定由默认控制器处理的特定扩展名,例如.*.action。我现在有点生疏了,但我认为在IIS 6中基本上是相同的想法。在.Net 2.0应用程序的web.config文件中,system.webServer标记中有以下部分:
<system.webServer>
<handlers>
<add name="defaultAction" path="*.action"
verb="*"
type="SumikinIntercom.Web.Controller.Controller,SumikinIntercom.Web.Controller"
resourceType="Unspecified" requireAccess="None" allowPathInfo="true" />
</handlers>
因此,任何扩展名为.action的URL都由我的默认控制器类处理。请注意笨拙的语法。我必须指定完全限定的类名(包括程序集名),后跟逗号,然后是完全限定的程序集名
对于较新版本的.Net,可能会有令人恼火的语法更改,因此请注意这些更改。在IIS 7中,您需要查看处理程序映射。您可以指定由默认控制器处理的特定扩展名,例如.*.action。我现在有点生疏了,但我认为在IIS 6中基本上是相同的想法。在.Net 2.0应用程序的web.config文件中,system.webServer标记中有以下部分:
<system.webServer>
<handlers>
<add name="defaultAction" path="*.action"
verb="*"
type="SumikinIntercom.Web.Controller.Controller,SumikinIntercom.Web.Controller"
resourceType="Unspecified" requireAccess="None" allowPathInfo="true" />
</handlers>
因此,任何扩展名为.action的URL都由我的默认控制器类处理。请注意笨拙的语法。我必须指定完全限定的类名(包括程序集名),后跟逗号,然后是完全限定的程序集名
对于较新版本的.Net,可能会有令人恼火的语法更改,因此请注意这些更改。根据默认参数的不同,您可以创建一个 如果您的参数是整数,这将起作用 如果您的默认参数是字符串或其他东西,而您无法创建正则表达式,或无法实现
irouteconsttraint
的东西,那么您最好为每个控制器创建一个匹配操作,当它超过默认值时,您已经尝试进行匹配
routes.MapRoute(
"YourController",
"YourController\{Param1}",
new { controller = "YourController", action = "YourAction" }
}
);
routes.MapRoute(
"YourController2",
"YourController2\{Param1}",
new { controller = "YourController2", action = "YourAction" }
}
);
routes.MapRoute(
"Default",
"{Param1}",
new { controller = "ProcessDynamicPage", action = "YourAction" }
);
如果你有很多控制器,你可能真的应该研究如何为你所期望的创建约束 根据默认参数,您可以创建 如果您的参数是整数,这将起作用 如果您的默认参数是字符串或其他东西,而您无法创建正则表达式,或无法实现
irouteconsttraint
的东西,那么您最好为每个控制器创建一个匹配操作,当它超过默认值时,您已经尝试进行匹配
routes.MapRoute(
"YourController",
"YourController\{Param1}",
new { controller = "YourController", action = "YourAction" }
}
);
routes.MapRoute(
"YourController2",
"YourController2\{Param1}",
new { controller = "YourController2", action = "YourAction" }
}
);
routes.MapRoute(
"Default",
"{Param1}",
new { controller = "ProcessDynamicPage", action = "YourAction" }
);
如果你有很多控制器,你可能真的应该研究如何为你所期望的创建约束 我很难理解这里的问题是什么。你能不能换一句话或者更简洁一点?另外,如果你已经做了一些工作,那么你最好分享一下,我很难理解这里的问题是什么。你能不能换一句话或者更简洁一点?另外,如果你已经做了一些工作,你最好和别人分享一下。好主意。恐怕我在添加答案时不知道新的MVC方法。好主意。恐怕我在添加答案时不知道新的MVC方法。@rhughes考虑到Zaid针对MVC特殊功能的更具体答案,这个答案可能有点过时,但是我会留下它,因为它在过去证明对我非常有用。@rhughes考虑到Zaid关于MVC特殊功能的更具体的回答,这个答案可能有点过时,但我会留下它,因为它在过去证明对我非常有用。