如何在ASP.NET Core中编写自定义actionResult [英] How to write custom actionResult in asp.net core

查看:584
本文介绍了如何在ASP.NET Core中编写自定义actionResult的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆