Asp.net mvc 相似路线图
我需要映射以创建控制器必须响应两个URL的内容:Asp.net mvc 相似路线图,asp.net-mvc,asp.net-mvc-routing,asp.net-web-api,Asp.net Mvc,Asp.net Mvc Routing,Asp.net Web Api,我需要映射以创建控制器必须响应两个URL的内容: "http://localhost/api/controller?id=1“(其中只有id值可以更改) "http://localhost/api/controller/anotherId/someconst“(其中,anotherId是唯一一个更改部件) 我将其映射到这样的路线: routes.MapHttpRoute("Test", "api/{controller}/{id}/{someconst}", new { controller =
routes.MapHttpRoute("Test", "api/{controller}/{id}/{someconst}", new { controller = "Test", someconst = RouteParameter.Optional });
并且必须在我的控制器中使用以下方法:
public void Get(int id) { ... }
public void Get(int anotherId, string someconst ) { ... }
它可以工作…但看起来不太好…因为“stringsomeconst”不是参数,它只是url的const部分。但是,如果我删除“stringsomeconst”参数,第二个url将不起作用。
是否可以将一个控制器映射到两个路由以解析此URL,从而在没有伪参数(实际上是常量)的情况下使其清晰?我已经得到了答案…只是必须路由
routes.MapHttpRoute("Test", "api/{controller}/{id}", new { controller = "Test", action = "Get", id= @"\d+"); );
routes.MapHttpRoute("TestSomeConst", "api/{controller}/{anotherId}/someconst", new { controller = "Test", action = "GetSomeconst", anotherId= @"\d+");
和更改控制器方法(操作):
好吧,我已经得到了答案…只是不得不
routes.MapHttpRoute("Test", "api/{controller}/{id}", new { controller = "Test", action = "Get", id= @"\d+"); );
routes.MapHttpRoute("TestSomeConst", "api/{controller}/{anotherId}/someconst", new { controller = "Test", action = "GetSomeconst", anotherId= @"\d+");
和更改控制器方法(操作):
您可以尝试这样绘制路线图:
routes.MapHttpRoute("Test", "api/{controller}/{id}/{action}", new { controller = "Test", action = "Get", id= @"\d+"} );
并采取行动:
public void Get(int id) { ... }
[HttpGet]
public void Someconst(int id) { ... }
由于您的操作默认为“Get”方法,因此您可以忽略该方法并使用以下方法调用它:
http://localhost/api/test/1
如果要调用其他方法,可以使用
http://localhost/api/test/1/someconst
您可以尝试这样绘制路线图:
routes.MapHttpRoute("Test", "api/{controller}/{id}/{action}", new { controller = "Test", action = "Get", id= @"\d+"} );
并采取行动:
public void Get(int id) { ... }
[HttpGet]
public void Someconst(int id) { ... }
由于您的操作默认为“Get”方法,因此您可以忽略该方法并使用以下方法调用它:
http://localhost/api/test/1
如果要调用其他方法,可以使用
http://localhost/api/test/1/someconst
您的意思是想在控制器上执行另一个操作吗?您可以说“api/{controller}/{id}/{action}”,然后将其称为“public void Get(int-anotherId,string-someconst)”,而不是“public void GetSomeConst(int-anotherId)”。确保你设置了默认操作我不完全理解你,但认为你是对的…我找到了相同的解决方案…谢谢你的意思是你想在控制器上执行另一个操作吗?您可以说“api/{controller}/{id}/{action}”,然后将其称为“public void Get(int-anotherId,string-someconst)”,而不是“public void GetSomeConst(int-anotherId)”。确保你设置了默认操作我不完全理解你,但认为你是对的…我找到了相同的解决方案…谢谢你移动到一个答案,这样我可以更好地解释。移动到一个答案,这样我可以更好地解释。你确定这会起作用吗?我完全复制了你的代码,它没有。。。第一种方法firedI稍微更改了代码,我运行了一个简单的测试应用程序,更新后的代码正常工作。我对控制器/动作命名的工作原理有点困惑。出于某种原因,我认为您不必在请求中为getsomeconst端点拼写“get”,但您确实需要。使用“[HttpGet]”属性,您不必这样做。您确定这会起作用吗?我完全复制了你的代码,它没有。。。第一种方法firedI稍微更改了代码,我运行了一个简单的测试应用程序,更新后的代码正常工作。我对控制器/动作命名的工作原理有点困惑。出于某种原因,我认为您不必在请求中为getsomeconst端点拼写“get”,但您确实需要。使用“[HttpGet]”属性,您不必这样做。