ASP.NET Core和CreateErrorResponse

时间:2016-03-12 20:56:03

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

我想从我的API方法返回无效的ModelState并尝试使用它在Web Api中的用法:

            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Test");

但它说,

  

严重级代码描述项目文件行抑制状态   错误CS1929' HttpRequest'不包含的定义   ' CreateErrorResponse'和最好的扩展方法重载   ' HttpRequestMessageExtensions.CreateErrorResponse(HttpRequestMessage,   HttpStatusCode,string)'需要一个类型的接收器   ' HttpRequestMessage'

所以,ASP.NET Core中的内容发生了变化,我应该将HttpRequestMessage作为第一个参数包含在内。但是如何创建它以及为什么它在回应中是必要的呢?

修改

我发现,以下代码可以返回无效模型:​​

return HttpBadRequest(ModelState);

但无论如何,想要知道灵活的方法来返回我自己的错误响应。

1 个答案:

答案 0 :(得分:0)

我发现mono还没有实现这些; System.Web.Http/HttpRequestMessageExtensions将扩展方法添加到System.Net.Http。你可以自己做吗

namespace System.Web.Http
{
    public static class ApiControllerExtensions
    {
        [System.Xml.Serialization.XmlRoot(ElementName = "Error", Namespace = "")]
        public class ErrorResponse
        {
            public string StatusCode { get; set; }
            public string Message { get; set; }
        }
        public static HttpResponseException CreateErrorResponseException(this ApiController controller, HttpStatusCode statusCode, string message)
        {
            ErrorResponse error = new ErrorResponse() 
            { 
                StatusCode = (int)statusCode + ": " + statusCode.ToString(),
                Message = message 
            };
            HttpResponseMessage responseMessage = controller.Request.CreateResponse(statusCode, error, controller.Request.GetConfiguration());
            return new HttpResponseException(responseMessage);
        }
    }
}