C# MVC-默认控制器

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通常是这样工作

我正在创建一个网站,我想有动态添加的网页。因此,我希望有一个更简单的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通常是这样工作的:
|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特殊功能的更具体的回答,这个答案可能有点过时,但我会留下它,因为它在过去证明对我非常有用。