旧版URL的ASP Mvc路由问题

时间:2011-05-31 10:56:52

标签: asp.net-mvc url-routing query-string

我有一个遗传的网址,我无法更改,这是在页面上输出,现在需要发布到页面的新MVC版本:

http://somesite.com/somepage?some-guid=xxxx-xxxx

现在我正在尝试将其映射到一个新的控制器,但我需要将一些guid放入我的控制器中:

public class MyController : Controller
{
    [HttpGet]
    public ActionResult DisplaySomething(Guid myGuid)
    {
        var someResult = DoSomethingWithAGuid(myGuid);
        ...
    }
}

我可以根据需要更改控制器和路由,但旧版网址无法更改。所以我对如何访问some-guid感到有点难过。

我尝试使用?some-guid = {myGuid}路由,但路由不喜欢?,所以我试图让它自动绑定,但因为它包含连字符,它似乎没有绑定。我想知道是否有任何类型的属性可以用来暗示它应该从查询字符串的一部分绑定...

任何帮助都会很棒......

3 个答案:

答案 0 :(得分:0)

routes.MapRoute(
  "Somepage", // Route name
  "simepage", // URL with parameters
  new { controller = "MyController", action = "DisplaySomething"
);

然后在你的控制器中:

public class MyController : Controller {
    public ActionResult DisplaySomething(Guid myGuid)
    {
        var someResult = DoSomethingWithAGuid(myGuid);
        ...
    }
}

答案 1 :(得分:0)

试试这个:

routes.MapRoute("SomePageRoute","Somepage", 
   new { controller = "MyController", action = "DisplaySomething" });

然后在你的控制器中:

public ActionResult DisplaySomething() {
   Guid sGuid = new Guid(Request.QueryString["some-guid"].ToString());
}

答案 2 :(得分:0)

我原本以为你会做一个像这样的路线..

routes.MapRoute(
                "RouteName", // Name the route
                "somepage/{some-guid}", // the Url
                new { controller = "MyController", action = "DisplaySomething", some-guid = UrlParameter.Optional }
            );

网址的{some-guid}部分与您的网址parmater匹配,并将其传递给控制器​​。

所以,如果你有这样的行动:

public ActionResult DisplaySomething(Guid some-guid)
    {
        var someResult = DoSomethingWithAGuid(some-guid);
        ...
    }

放手一搏,看看你如何上场..