ASP.NET Core和CreateErrorResponse

Ole*_* Sh 5 c# asp.net asp.net-web-api asp.net-core

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

            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Test");
Run Code Online (Sandbox Code Playgroud)

但它说,

严重性代码说明项目文件行抑制状态错误CS1929'HttpRequest'不包含'CreateErrorResponse'的定义,最佳扩展方法重载'HttpRequestMessageExtensions.CreateErrorResponse(HttpRequestMessage,HttpStatusCode,string)'需要类型为'HttpRequestMessage'的接收器

因此,ASP.NET Core中发生了一些变化,我应该将HttpRequestMessage作为第一个参数。但是,如何创建它以及为什么在响应中它是必需的呢?

编辑:

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

return HttpBadRequest(ModelState);
Run Code Online (Sandbox Code Playgroud)

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

KCD*_*KCD 2

我发现 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)