问题描述
|
我有一个无法更改的旧网址,该网址输出在一个页面上,该页面现在需要发布到该页面的新MVC版本中:
http://somesite.com/somepage?some-guid=xxxx-xxxx
现在,我试图将其映射到新的控制器,但是我需要将一些指南引入我的控制器中:
public class MyController : Controller
{
[HttpGet]
public ActionResult displaySomething(Guid myGuid)
{
var someResult = DoSomethingWithAGuid(myGuid);
...
}
}
我可以随意更改控制器和路由,但是旧版网址无法更改。因此,我对如何获得某些指导感到困惑。
我尝试使用?some-guid = {myGuid}进行路由,但是路由不喜欢?,因此我尝试使其自动绑定,但是由于它包含连字符,因此似乎没有绑定。我想知道是否可以使用任何类型的属性来暗示它应该从查询字符串的一部分进行绑定...
任何帮助都会很棒...
解决方法
我以为你会做这样的一条路线。
routes.MapRoute(
\"RouteName\",// Name the route
\"somepage/{some-guid}\",// the Url
new { controller = \"MyController\",action = \"DisplaySomething\",some-guid = UrlParameter.Optional }
);
URL的{some-guid}部分与您的url参数匹配,并将其传递给控制器。
因此,如果您采取以下行动:
public ActionResult DisplaySomething(Guid some-guid)
{
var someResult = DoSomethingWithAGuid(some-guid);
...
}
试一试,看看你过得怎么样。
, 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);
...
}
}
, 尝试这个:
routes.MapRoute(\"SomePageRoute\",\"Somepage\",new { controller = \"MyController\",action = \"DisplaySomething\" });
然后在您的控制器中:
public ActionResult DisplaySomething() {
Guid sGuid = new Guid(Request.QueryString[\"some-guid\"].ToString());
}