【问题标题】:Trying to create a link with WebApi not working尝试使用 WebApi 创建链接不起作用
【发布时间】:2017-05-23 16:31:23
【问题描述】:

在我的项目中,我需要创建一个带参数的链接,所以我是这样做的:

var link = new Uri(Url.Link("GetUser", new { id = 1 }));

static List<Students> std = new List<Students>()
{
    new Students(){id = 1, Nome = "Nathiel"},
    new Students() {id = 2, Nome = "Barros"}
};

以及他们将接收 id 的方法:

[Route("{id:int}",Name = "GetUser")]
[HttpGet]
public async Task<HttpResponseMessage> Get(int id)
{
    var u = std.FirstOrDefault(x => x.id == id);

    var response = new HttpResponseMessage();
    response = Request.CreateResponse(HttpStatusCode.OK, u);

    var task = new TaskCompletionSource<HttpResponseMessage>();
    task.SetResult(response);
    return await task.Task;
}

问题是,URL 没有连接第二个路由“GetUser”,并且是这样的:"http://localhost:52494/api/v1/Register/1"

【问题讨论】:

  • 您期望的 URL 是什么?

标签: c# asp.net-web-api asp.net-web-api-routing


【解决方案1】:

假设路由前缀是api/v1/Register

[RoutePrefix("api/v1/Register")]
public class RegisterController : ApiController {
    [HttpGet]
    [Route("{id:int}",Name = "GetUser")] //Matches GET api/v1/Register/1
    public async Task<IHttpActionResult> Get(int id) {
        //...code removed for brevity
    }
}

那是设计使然。

Route Name 用于标识生成路由时要使用的路由模板。

如果你想在 URL 中添加GetUser,则将其包含在路由模板中

[RoutePrefix("api/v1/Register")]
public class RegisterController : ApiController {
    [HttpGet]
    [Route("GetUser/{id:int}",Name = "GetUser")] //Matches GET api/v1/Register/GetUser/1
    public async Task<IHttpActionResult> Get(int id) {
        //...code removed for brevity
    }
}

【讨论】:

  • 知道了!谢谢,那是我的问题,Name 属性用于识别实际路线。
猜你喜欢
  • 2023-03-18
  • 2016-01-13
  • 2019-06-12
  • 1970-01-01
  • 2019-08-25
  • 2011-06-22
  • 2012-06-15
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多