gpt4 book ai didi

c# - 创建自定义委托(delegate)处理程序

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:51 28 4
gpt4 key购买 nike

我希望将自定义委托(delegate)处理程序添加到我的 asp.net web api。这个处理程序的目的是检查我的请求的内容,并在它们继续在请求管道中之前根据某些条件验证它们......我还想在这个入口点注销请求。

然而,在管道中传递的 request.content 是一个 system.web.http.webhost.httpcontrollerhandler.lazystreamcontent - 在 MSDN 中查找这种类型没有任何关于如何反序列化或查看请求内容的信息 - 当我尝试从流中读取内容,但只剩下一个空字符串。看例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;

namespace Haxy.Pencilthis.Api.MVC.Handlers
{
public class ContentValidationHandler : DelegatingHandler
{

private static log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
Stream strea = new MemoryStream();
request.Content.CopyToAsync(strea);
StreamReader reader = new StreamReader(strea);
String res = reader.ReadToEnd();
Log.Info("request content: " + res);
return base.SendAsync(request, cancellationToken);

//
}

}
}

最佳答案

没有任何内容返回到 res 的原因是流位置设置为请求内容的结尾,而不是开头。此外,由于未正确等待 base.SendAsync 方法,因此响应出错。

下面的正确实现:

public class ContentValidationHandler : DelegatingHandler
{

private static log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{

var response = await base.SendAsync(request, cancellationToken);


Stream strea = new MemoryStream();
await request.Content.CopyToAsync(strea);
strea.Position = 0;
StreamReader reader = new StreamReader(strea);
String res = reader.ReadToEnd();
Log.Info("request content: " + res);

return response;







//
}





}

关于c# - 创建自定义委托(delegate)处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22285663/

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