【问题标题】:WebApi2 Routing with Get Request does not work带有获取请求的 WebApi2 路由不起作用
【发布时间】:2015-11-12 23:09:22
【问题描述】:

您好,我正在制作一个简单的程序,您可以搜索用户,注册用户,并获取所有已注册的用户。

我希望能够使用

搜索我的用户

/api/user/search?name=...&email=B

但这不起作用。我收到一个错误:

{ "Message": "没有找到与请求 URI 'http://localhost:63881/api/user/search' 匹配的 HTTP 资源。", "MessageDetail": "在控制器 'User' 上找不到与请求匹配的操作。" }

我的代码看起来像这样

[RoutePrefix("api/user")]
public class UserController : ApiController
{
    public HttpResponseMessage Get() {
        // Check if the user is in the database 
        return Request.CreateResponse(HttpStatusCode.OK, "Return All");
    }

    public HttpResponseMessage Post(UserForm form) {
        if (ModelState.IsValid == false) {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
        }
        if (form == null) {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Please enter data");
        }
        // Register the person
        return Request.CreateResponse(HttpStatusCode.OK, "Register");
    }

    [Route("search/{name}/{email}")]
    [HttpGet]
    public HttpResponseMessage SearchGet(string name, string email) {
        return Request.CreateResponse(HttpStatusCode.OK, "Found");
    }

谢谢!

【问题讨论】:

  • 点击 /api/user/search/bob/jim 是否有效
  • 是的,但我希望它也可以通过 /api/user/search?name=...&email= B

标签: asp.net-web-api2


【解决方案1】:

向 SearchGet 方法添加另一个路由属性应该可以工作:

[Route("search") ] 
[Route("search/{name}/{email}")]
    [HttpGet]
    public HttpResponseMessage SearchGet(string name, string email) {
        return Request.CreateResponse(HttpStatusCode.OK, "Found");
    }

它将根据查询字符串参数计数和名称或每个查询字符串参数映射请求。

【讨论】:

  • 奇怪。这对我来说很好。在浏览器的应用程序中转到/Help。您是否看到 API 列表?你的列在这里吗?你能把你发送给搜索的确切请求发给我吗?我正在使用 /api/user/search?name=Bob&email=b@b.com 并获得有效回复。
  • 还值得一提的是,我传递了与您的示例相同的参数。 “...”代表姓名,“B”代表电子邮件。它仍然有效。
猜你喜欢
  • 2017-09-29
  • 2017-06-23
  • 1970-01-01
  • 2016-01-13
  • 2021-02-26
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
相关资源
最近更新 更多