在从 .net Framework 4.8 升级到 .net 8 期间,我正在致力于从 IhttpActionResult 到 IActionResult 的过渡,并且我
protected IActionResult InvalidParameter(string parameterName)
{
var error = CommonServiceError.InvalidParameters.InvalidParameter(parameterName);
return new FailureResult(serviceResultHandler.Resolve(error.ErrorCode), error);
}
将方法类型更改为 IActionResult 后,FailureResult 收到错误: 无法将类型“P1S.Common.WebApi.ActionResults.FailureResult”隐式转换为“Microsoft.AspNetCore.Mvc.IActionResult”。存在显式转换(您是否缺少转换?)SesisServer.WebApi
这是有道理的。但我正在寻找解决方法。由于这是库的一部分,我无法编辑它以使其工作,对吗?
有什么方法可以代替它来做同样的事情吗?
如有任何建议,我们将不胜感激。谢谢你。
也供参考,这是 FailureResult 方法:
#nullable enable
namespace P1S.Common.WebApi.ActionResults
{
public class FailureResult : IActionResult
{
public HttpStatusCode StatusCode { get; }
public IServiceError ServiceError { get; }
public FailureResult(HttpStatusCode statusCode, IServiceError serviceError)
{
this.StatusCode = statusCode;
this.ServiceError = serviceError;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult<HttpResponseMessage>(this.Execute());
}
public HttpResponseMessage Execute()
{
HttpContext.Current.Items[(object) "ServiceError"] = (object) this;
FailureResponse failureResponse = this.ServiceError.ToFailureResponse();
return new HttpResponseMessage(this.StatusCode)
{
Content = (HttpContent) new ObjectContent<FailureResponse>(failureResponse, (MediaTypeFormatter) new JsonMediaTypeFormatter())
};
}
}
}
我什至从 IhttpActionResult 中删除了 http,但我不确定这是否会起作用,因为它是库中的方法。
再次感谢!
所以这里的大局是.net core 中有一个 P1S.Common.WebApi 的替代库。
您可以在 nuget 包管理器中将该包替换为 P1S.Common.Core.WebApi,在升级框架时它是一个超级好的替代品。这解决了我原来的问题。