WebAPI操作返回:请求的资源不支持http方法' GET'

时间:2016-08-29 13:18:08

标签: asp.net-web-api

这是我的示例网络API动作返回当我没有传递任何国家/地区代码时,请求的资源不支持http方法' GET'。

[HttpGet, Route("GetByID/{customerID}")]
        public HttpResponseMessage GetCustomer(string customerID)
        {
            HttpResponseMessage retObject = null;
            bool IsError = false;
            Customer customer = null;
            var message="";

            if (string.IsNullOrEmpty(customerID))
            {
                 message = string.Format("Customer ID is empty or null");
                 HttpError err = new HttpError(message);
                 retObject = Request.CreateErrorResponse(HttpStatusCode.NotFound, err);
                 retObject.ReasonPhrase = message;
                IsError = true;
            }
            else
            {
                customer = repository.Get(customerID);
                if (customer.CustomerID == null)
                {
                     message = string.Format("Customer with id [{0}] not found", customerID);
                     HttpError err = new HttpError(message);
                     retObject = Request.CreateErrorResponse(HttpStatusCode.NotFound, err);
                     retObject.ReasonPhrase = message;
                     IsError = true;

                }
            }

            if (IsError)
                return retObject;
            else
                return Request.CreateResponse(HttpStatusCode.OK, customer);
        }

当我在没有参数的情况下调用 GetByID 时,我没有收到我在代码中设置的错误消息。看到我的代码然后必须注意我在customerID为空或null时设置错误但是我得到了不同的错误。

当客户ID为空或为空时,我设置此错误。

    if (string.IsNullOrEmpty(customerID))
    {
         message = string.Format("Customer ID is empty or null");
         HttpError err = new HttpError(message);
         retObject = Request.CreateErrorResponse(HttpStatusCode.NotFound, err);
         retObject.ReasonPhrase = message;
        IsError = true;
    }

所以请指导我如何在没有提供客户ID的情况下返回我的错误,当任何方式存在调用........时。指导我在我的代码中更改的位置,因此当客户ID为null或为空时,我的错误消息应该返回到客户端。感谢

更新1

这种问题已被排序。

[HttpGet, Route("GetByID/{customerID?}")]
public HttpResponseMessage GetCustomer(string customerID = null)
{

}

1 个答案:

答案 0 :(得分:1)

您将参数customerID定义为路由中的必需参数,因此如果未提供参数,则找不到操作。尝试使用?将参数标记为可选参数:

[HttpGet, Route("GetByID/{customerID?}")]

这样您就可以处理动作中的空参数或空参数。