【问题标题】:ASP.NET Core and CreateErrorResponseASP.NET Core 和 CreateErrorResponse
【发布时间】:2016-06-28 01:19:39
【问题描述】:

我想从我的 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);

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

【问题讨论】:

  • 您可以在 ModelState 中添加和删除错误
  • @tmg 我可以,但是我想将它返回给客户端的问题是如此灵活,我怎么能在 Web API 2 中
  • 在 dotnet core 2.0 中可以使用return BadRequest(ModelState);

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


【解决方案1】:

我发现 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);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-10-07
    • 2017-03-20
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 2017-01-03
    相关资源
    最近更新 更多