gpt4 book ai didi

asp.net - WebApi2 GET 上的 InvalidCastException 'HttpResponseMessage' 到 'IHttpActionResult'

转载 作者:行者123 更新时间:2023-12-05 08:58:12 25 4
gpt4 key购买 nike

最近我一直在关注一些 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

不幸的是,虽然 Ok(r) 部分工作正常,CreateErrorResponse 抛出一个 InvalidCastException:

Unable to cast object of type 'System.Net.Http.HttpResponseMessage' to type 'System.Web.Http.IHttpActionResult'.

我知道错误发生的原因,但不确定如何修复它的正确方法。在其他线程中,人们建议 CreateErrorResponse() 是 WebApi2 的最佳方法,但 VS 创建了返回 IHttpActionResult 的示例 GET 请求。目前,它的类似东西似乎不适合我们这些新手......

最佳答案

不,这并不明显,但您可以获得所需的内容(错误代码和消息)并从 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));
}
}

你可以这样调用它:

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");
}

关于asp.net - WebApi2 GET 上的 InvalidCastException 'HttpResponseMessage' 到 'IHttpActionResult',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25116032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com