Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 相似路线图_Asp.net Mvc_Asp.net Mvc Routing_Asp.net Web Api - Fatal编程技术网

Asp.net mvc 相似路线图

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 =

我需要映射以创建控制器必须响应两个URL的内容:

  • "http://localhost/api/controller?id=1“(其中只有id值可以更改)
  • "http://localhost/api/controller/anotherId/someconst“(其中,anotherId是唯一一个更改部件)
  • 我将其映射到这样的路线:

    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]”属性,您不必这样做。