我遗漏了一些关于ASP.net Web API的基本知识。我想要一个从GET中拉出字符串的方法:
/ API /值/一些+字符串+值
我将开箱即用的GET api / values / 5更改为:
public string Get([FromUri] string someString)
{
return "some return value";
}
但我只得到404.我要离开的是什么?
答案 0 :(得分:0)
FromUri
是多余的,因为GET没有身体。
但是要回答你的问题,我们需要将someString
映射到URI的正确部分(在你的情况下,它是最后一个元素)。如果没有映射,客户端必须在URL中命名参数。所以,例如,这对你现在有用:
http://localhost:53865/api/values?somestring=foo
哪个好,所有,但你想要这个:
http://localhost:53865/api/values/foo
你可能想知道,"为什么默认Get(int Id)
有效而不是我的?"好吧,让我们看看解决方案的WebApiConfig
文件夹中的App_Start
。在那里,您应该会看到类似的内容:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这将设置WebApi的默认路由,即mywebsite.com/api/controller/id。只要你的控制器'动作遵循简单的命名约定,一切都会自动运行。现在,如果您使用的是WebApi 1(您真的不应该使用新项目,但可能基于您的评论),那么您需要在之前添加新的映射默认的。类似的东西:
config.Routes.MapHttpRoute("SomeString", "api/{controller}/{someString}");
过去是唯一的方式,但几乎没有人再做了。相反,我们使用[Route()]
属性,该属性允许我们为每个单独的操作设置路由。因此,如果我们向您添加路由属性,它将如下所示:
[Route("api/values/{someString}")]
public string Get(string someString)
{
return "some return value";
}
这应该为你解决。 :)