C# 中的 Web API 路由
Web API routing in C#
我正在尝试构建一个接受 2 个参数的网络 API。但是,在调用 API 时,它总是命中没有任何参数的方法。
我按照 here 中的说明进行操作,但不明白为什么它不起作用。
我使用 'PostMaster' Chrome 扩展发送的请求:http://localhost:51403/api/test/title/bf
对于上面的请求,我预计会命中第一个方法,但是正在到达第二个方法。
控制器中的方法是:
// Get : api/test/type/slug
public void Get(string type,string slug){
//Doesn't reach here
}
// Get : api/test
public void Get() {
// Reaches here even when the api called is GET api/test/type/slug
}
webApiConfig 没有太大变化,除了它接受 2 个参数:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id1}/{id2}",
defaults: new { id1 = RouteParameter.Optional, id2 = RouteParameter.Optional }
);
}
我对文档的理解是不必更改 webapiconfig。
这是我得到的错误
{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:51403/api/test/title/bf'.",
"MessageDetail":"No action was found on the controller 'test' that matches the request."}
您必须在路由配置中使用名为 id1 和 id2 的参数名称。
像这样:
// Get : api/test/type/slug
public void Get(string id1,string id2){
//Doesn't reach here
}
为了让路由引擎将请求路由到正确的 Action,它首先查找参数与路由中的名称匹配的方法。
换句话说,这个:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id1}/{id2}",
defaults: new { id1 = RouteParameter.Optional, id2 = RouteParameter.Optional }
);
匹配项:
public void Get(string id1, string id2) {}
但不是:
public void Get(string type, string slug) {}
如果你愿意,这也行得通:
http://localhost?type=weeeee&slug=herp-derp
这会匹配
public void Get(string type, string slug)
我正在尝试构建一个接受 2 个参数的网络 API。但是,在调用 API 时,它总是命中没有任何参数的方法。 我按照 here 中的说明进行操作,但不明白为什么它不起作用。
我使用 'PostMaster' Chrome 扩展发送的请求:http://localhost:51403/api/test/title/bf
对于上面的请求,我预计会命中第一个方法,但是正在到达第二个方法。
控制器中的方法是:
// Get : api/test/type/slug
public void Get(string type,string slug){
//Doesn't reach here
}
// Get : api/test
public void Get() {
// Reaches here even when the api called is GET api/test/type/slug
}
webApiConfig 没有太大变化,除了它接受 2 个参数:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id1}/{id2}",
defaults: new { id1 = RouteParameter.Optional, id2 = RouteParameter.Optional }
);
}
我对文档的理解是不必更改 webapiconfig。 这是我得到的错误
{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:51403/api/test/title/bf'.",
"MessageDetail":"No action was found on the controller 'test' that matches the request."}
您必须在路由配置中使用名为 id1 和 id2 的参数名称。 像这样:
// Get : api/test/type/slug
public void Get(string id1,string id2){
//Doesn't reach here
}
为了让路由引擎将请求路由到正确的 Action,它首先查找参数与路由中的名称匹配的方法。
换句话说,这个:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id1}/{id2}",
defaults: new { id1 = RouteParameter.Optional, id2 = RouteParameter.Optional }
);
匹配项:
public void Get(string id1, string id2) {}
但不是:
public void Get(string type, string slug) {}
如果你愿意,这也行得通:
http://localhost?type=weeeee&slug=herp-derp
这会匹配
public void Get(string type, string slug)