【问题标题】:How to use attribute routing in for get method with same parameter in web api 2如何在Web api 2中使用具有相同参数的get方法中的属性路由
【发布时间】:2018-06-27 15:30:42
【问题描述】:

以下是调用 Web API 调用的代码

public async System.Threading.Tasks.Task<ActionResult> RequisitionNameByQuantityThisDraw()
{
    //Guid applicationRequisitionOid

    string userName = string.Empty;
    SessionObject sessionData = new SessionObject().GetSessionData();
    if (sessionData == null)
    {
        return RedirectToAction("UserLogin", "Login");
    }
    Guid aa = new Guid("41CF8843-2AF4-40D0-9998-D6D516367A7D");
    HttpResponseMessage response = _HttpClient.GetAsync("api/ApplicationSIRMeasure/RequisitionNameByQuantity?applicationRequisitionOid=" + aa).Result;

    string userJsonString = await response.Content.ReadAsStringAsync();
    return Json(userJsonString, JsonRequestBehavior.AllowGet);
}

以下是 Web API 方法

public HttpResponseMessage Get(Guid applicationRequisitionOid)
{
    var result = _IService.GetAll(applicationRequisitionOid);
    if (result == null)
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, "No data found");
    else
        return Request.CreateResponse(HttpStatusCode.OK, result);
}   

[Route("api/ApplicationSIRMeasure/RequisitionNameByQuantity/{applicationRequisitionOid:Guid}")]
public HttpResponseMessage RequisitionNameByQuantity(Guid applicationRequisitionOid)
{
    Guid id = new Guid("41CF8843-2AF4-40D0-9998-D6D516367A7D");
    var result = _IService.GetRequisitionByQunatityThisDraw(id);
    if (result == null)
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, "No data found");
    else
        return Request.CreateResponse(HttpStatusCode.OK, result);
}

每当我使用上述代码调用此 Web API 时,它都会转到第一个 get 方法。 但我不会调用第二种方法

【问题讨论】:

  • 第一种方法(Get(Guid applicationRequisitionOid))上面的[Route]属性是什么?

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


【解决方案1】:

Web API 上的路由是

[Route("api/ApplicationSIRMeasure/RequisitionNameByQuantity/{applicationRequisitionOid:guid}")]

但请求正在调用

"api/ApplicationSIRMeasure/RequisitionNameByQuantity?applicationRequisitionOid="

因为 url 与第二个路由模板不匹配,所以它正在寻找其他操作的匹配项,因为查询字符串参数匹配。

您需要更新被调用的 URL 以匹配目标操作的路由模板。

var aa = new Guid("41CF8843-2AF4-40D0-9998-D6D516367A7D");
var url = string.Format("api/ApplicationSIRMeasure/RequisitionNameByQuantity/{0}", aa);
var response = await _HttpClient.GetAsync(url);

当您可以使用用于创建 Guid 实例的相同字符串构建 URL 时,我真的认为不需要创建 Guid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多