gpt4 book ai didi

asp.net-web-api - 在 WebAPI Formatter 中,如何从 HttpContent 获取 URL?

转载 作者:行者123 更新时间:2023-12-01 02:27:53 26 4
gpt4 key购买 nike

在 WebAPI 服务中,我们使用 Formatter 读取请求中的内容参数。我们需要访问 URL 才能正确转换内容参数。 HttpRequestMessage 不可用,我们不能使用 HttpContext.Current.Request,因为 HttpContext.Current 为 null。在 http://aspnetwebstack.codeplex.com/workitem/82 上请求在读取时访问 HttpRequestMessage ,但此问题已关闭,因为 HttpContent 在 Read 上可用。但是,我不知道如何从 HttpContent 获取 URL,即使可能。

最佳答案

格式化程序上有一个名为 GetPerRequestFormatterInstance 的方法,您可以重写该方法以创建格式化程序的新实例,其中包含有关请求的状态信息。顺便说一下,这个方法 GetPerRequestFormatterInstance 只在请求的反序列化阶段被调用。下面的例子:

public class TextPlainFormatter : BufferedMediaTypeFormatter
{
public TextPlainFormatter()
{
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
}

public HttpRequestMessage CurrentRequest
{
get;
private set;
}

public override MediaTypeFormatter GetPerRequestFormatterInstance(Type type, HttpRequestMessage request, MediaTypeHeaderValue mediaType)
{
TextPlainFormatter frmtr = new TextPlainFormatter();
frmtr.CurrentRequest = request;

//Copy from the original formatter instance to the new instance
frmtr.MediaTypeMappings.Clear();
foreach (MediaTypeMapping mediaTypeMapping in this.MediaTypeMappings)
{
frmtr.MediaTypeMappings.Add(mediaTypeMapping);
}

frmtr.RequiredMemberSelector = this.RequiredMemberSelector;

frmtr.SupportedEncodings.Clear();
foreach (Encoding supportedEncoding in this.SupportedEncodings)
{
frmtr.SupportedEncodings.Add(supportedEncoding);
}

frmtr.SupportedMediaTypes.Clear();
foreach (MediaTypeHeaderValue supportedMediaType in this.SupportedMediaTypes)
{
frmtr.SupportedMediaTypes.Add(supportedMediaType);
}

return frmtr;
}

关于asp.net-web-api - 在 WebAPI Formatter 中,如何从 HttpContent 获取 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14985855/

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