3

我的 MVC4 项目中有一个 SiteController 类,'Site' url 工作正常,但我需要在 'Site' 之后的动态 url 部分,我需要 url 看起来像这样:

mysite.com/Site/{DYNAMICSTRING}/Users(或其他)

{DYNAMICSTRING} 可以是子站点的名称,因此控制器应检查该子站点是否确实存在于数据库中。

现在我正在使用查询字符串,但这不是我的客户想要的。

我怎样才能做到这一点?

额外细节

我的路由:

    routes.MapRoute(
                "Subdomain",                                              // Route name
                "{controller}/{action}/{dynamicString}",                           // URL with parameters
                new { controller = "Site", action = "Subdomain" }  // Parameter defaults
            );

我的控制器:

    public ActionResult Subdomain(string dynamicString)
    {
        return View();
    }

当我导航到时,dynamicString 的值为 null:/Site/Subdomain/SomeString

4

2 回答 2

3

您必须配置路由。例如,如果您有 Homecontroller:

    public class HomeController:Controller
    {
        public ActionResult Subdomain(string dynamicString)
        {
            return View();
        }
    }

然后你必须配置你的路由类似的东西

routes.MapRoute(
            "Subdomain",                                              // Route name
            "{controller}/{action}/{dynamicString}/anyOtherParams",                           // URL with parameters
            new { controller = "Home", action = "Subdomain", dynamicString = "" }  // Parameter defaults
        );
于 2013-02-26T09:15:31.183 回答
1

你可以这样做:

routes.MapRoute(
            name: "Default", // Route name
            url:"Site/{dynamicstring}", // URL with parameters
            defaults: new {controller = "Site", action = "Index" }   // Defaults
        );

您可以像这样继续向 url 部分添加部分

 url:"Site/{dynamicstring}/{anythingelse}" //  url:"Site/{dynamicstring}/{anythingelse}/{bla}/Test/{hello}/etc..."

或者你也可以有一条这样的路线:"

routes.MapRoute(
            name: "Default", // Route name
            url:"{*all}", // catch all
            defaults: new {controller = "Site", action = "Index" }   // Defaults
        );

并通过在 / 上拆分它们来获取控制器索引操作中的所有其他部分

确保将自定义路由放在默认路由之前,否则默认路由会选择它。

在您的控制器中,您会得到如下信息:

public ActionResult Index(string dynamicstring, string anythingelse)
    {

        return View();
    }

如果您随后传入这样的网址:

http://www.mysite.com/Site/test.nl/jordy

您的动态字符串将具有值“test.nl”,而您的任何其他内容将具有“jordy”我希望这会有所帮助

于 2013-02-26T10:14:20.000 回答