webapi的ActionFilterAttribute可以直接返回数据给客户端吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webapi的ActionFilterAttribute可以直接返回数据给客户端吗相关的知识,希望对你有一定的参考价值。

参考技术A //此处暂时以401返回,可调整为其它返回
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
//actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);

艹,csdn这是要关门的节奏,回复的功能都出500错误了!
------解决思路----------------------
上面两种返回HttpResponseMessage的方法(构造)都有几种重载,可以传入自定义class,也可以返回StringContent之类的

asp.net webapi bug : System.OperationCanceledException 异常处理

asp.net webapi的过滤器 ExceptionFilterAttribute 捕获一个异常消息如下:

检测到站点发生错误 "已取消该操作。"

 错误跟踪: 在 System.Threading.CancellationToken.ThrowIfCancellationRequested() 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext() --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在 System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext() --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext() --- 引发异常的上一位置中堆栈跟踪的末尾 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在 System.Web.Http.Controllers.ExceptionFilterResult.d__0.MoveNext()

官方的解答

关于异常的疑难解答:System.OperationCanceledException

  • 项目

  • 2011/08/12

如果在 UICancelOption 设置为 ThrowException 的情况下执行某一操作,然后取消了该操作,则将引发 OperationCanceledException。

相关提示

  • 如果您不希望引发此异常,请将 OperationCanceledException 设置为 DoNothing。
    UICancelOption 的默认值为 ThrowException。如果您不希望当用户取消操作时引发此异常,请将枚举值设置为 DoNothing。

https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/ms164920(v=vs.100)

解决办法

public class CancelledTaskBugWorkaroundMessageHandler : DelegatingHandler
    
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        
            HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
            // Try to suppress response content when the cancellation token has fired; ASP.NET will log to the Application event log if there's content in this case.
            if (cancellationToken.IsCancellationRequested)
            
                return new HttpResponseMessage(HttpStatusCode.InternalServerError);
            
            return response;
        
    
config.MessageHandlers.Add(new CancelledTaskBugWorkaroundMessageHandler());

以上是关于webapi的ActionFilterAttribute可以直接返回数据给客户端吗的主要内容,如果未能解决你的问题,请参考以下文章

WebApi系列详解WebApi如何传递参数

WebApi学习系列

WebAPI测试

20181124_webAPI基础01_创建一个基础的WebAPI项目

快速入门系列--WebAPI--01基础

初始WebApi 利用WebApi实现基础的CRUD