Evi*_*lDr 1 vb.net asp.net asp.net-web-api2
最近,我一直在关注一些WebApi2教程。我遇到的一种情况是,如果请求的GET操作返回用户权限之外的数据,那么我需要返回一个禁止代码。
Imports System.Net
Imports System.Net.Http
Imports System.Web.Http
Namespace Controllers
Public Class MyController
Inherits ApiController
<Route("Records/{id}")>
Public Function [Get](id As Int32) As IHttpActionResult
If Not Remit.IsWithinRemit(id) Then
Return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "This data is not within your remit")
Else
Dim r As New CustomObject(id)
Return Ok(r)
End If
End Function
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
不幸的是,尽管该Ok(r)部分工作正常,但CreateErrorResponse抛出了InvalidCastException:
无法将类型为“ System.Net.Http.HttpResponseMessage”的对象转换为类型为“ System.Web.Http.IHttpActionResult”的对象。
我知道为什么会发生错误,但是不确定如何解决错误的正确方法。在其他线程中,人们建议这CreateErrorResponse()是WebApi2的最佳方法,但是VS创建它的示例GET请求返回IHttpActionResult。目前,对于我们的新手来说,它的东西似乎并不适合...
不,这并不明显,但是您可以获取所需的内容(错误代码和消息)并从type方法返回它IHttpActionResult。无需更改返回类型或不出现错误消息。
这是帮助程序类:
public class ErrorResult : IHttpActionResult
{
private HttpRequestMessage Request { get; }
private HttpStatusCode statusCode;
private string message;
public ErrorResult(HttpRequestMessage request, HttpStatusCode statusCode, string message)
{
this.Request = request;
this.statusCode = statusCode;
this.message = message;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(Request.CreateErrorResponse(statusCode, message));
}
}
Run Code Online (Sandbox Code Playgroud)
您可以这样称呼它:
public IHttpActionResult MyMethod()
{
MyServiceLayer myServiceLayer = new MyServiceLayer();
MyType myvar;
if (MyServiceLayer.EverythingIsOK(ref myvar))
return Ok(myvar);
else
return new ErrorResult(Request, HttpStatusCode.SomeErrorCode, "Something Is Wrong");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5014 次 |
| 最近记录: |