如何在ASP.NET Core中编写自定义actionResult [英] How to write custom actionResult in asp.net core
问题描述
在webApi2中,我可以通过继承IHttpActionResult来编写自定义ActionResult。
In webApi2 i could write a custom ActionResult by inheriting IHttpActionResult.
示例:
public class MenivaActionResult : IHttpActionResult
{
private readonly HttpRequestMessage _request;
private readonly ServiceResponseBase _response;
public MenivaActionResult(HttpRequestMessage request, ServiceResponseBase response)
{
_request = request;
_response = response;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken token)
{
HttpResponseMessage httpresponseMessage = _response.Exception != null
? _request.CreateErrorResponse((HttpStatusCode)_response.HttpCode,
_response.Exception.Message+":"+_response.Exception.HelpCode)
: _request.CreateResponse((HttpStatusCode)_response.HttpCode, _response.Data);
return Task.FromResult(httpresponseMessage);
}
}
ServiceResponseBase类对象包含所有异常和来自服务层。
The ServiceResponseBase class object holds all the exception and data from service layer..
我如何将此代码移植到asp.net核心。我尝试过,但是我不知道如何从.net核心中的 HttpRequestMessage 对象创建响应消息。 IActionResult 仅具有 Task ExecuteResultAsync(ActionContext context)
方法。我如何修改此方法的响应
How i can port this code to asp.net core. I tried but i dont know how create a response message from HttpRequestMessage object in .net core. The IActionResult only have Task ExecuteResultAsync(ActionContext context)
method. how i can modify the response from this method
推荐答案
这里是一个示例:
public class TestResult
{
public Exception Exception { get; set; }
public object Data { get; set; }
}
public class TestActionResult : IActionResult
{
private readonly TestResult _result;
public TestActionResult(TestResult result)
{
_result = result;
}
public async Task ExecuteResultAsync(ActionContext context)
{
var objectResult = new ObjectResult(_result.Exception ?? _result.Data)
{
StatusCode = _result.Exception != null
? StatusCodes.Status500InternalServerError
: StatusCodes.Status200OK
};
await objectResult.ExecuteResultAsync(context);
}
}
ObjectResult $ c如果从操作返回非
IActionResult
,则$ c>是转换结果的类型。
ObjectResult
is the type your results are converted if you return a non-IActionResult
from an action. It will do content negotiation for you.
您还可以继承 ObjectResult
并将状态代码和数据设置为
You could also inherit from ObjectResult
and setup the status code and data to be written in the constructor.
有关ASP.NET Core中内容协商的更多信息: https://docs.microsoft.com/zh-cn/aspnet/core/mvc/models/formatting#content-negotiation
More on content negotiation in ASP.NET Core: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/formatting#content-negotiation
这篇关于如何在ASP.NET Core中编写自定义actionResult的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!