gpt4 book ai didi

c# - ASP.NET Web API PUT action 参数不携带

转载 作者:行者123 更新时间:2023-11-30 21:01:21 25 4
gpt4 key购买 nike

好的,所以我有一个 MediaTypeFormatter:

public class iOSDeviceXmlFormatter : BufferedMediaTypeFormatter
{
public iOSDeviceXmlFormatter() {
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml"));
SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xml"));
}
public override bool CanReadType(Type type) {
if (type == typeof(iOSDevice)) {
return true;
}
return false;
}

public override object ReadFromStream(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger) {
iOSDevice device = null;
using (XmlReader reader = XmlReader.Create(readStream)) {
if (reader.ReadToFollowing("iOSDevice")) {
if (!reader.IsEmptyElement) {
device = new iOSDevice();
... do processing here ...
}
}
}
readStream.Close();
return device;
}

我有这个 Action 来处理 PUT:

    public void Put(string id, iOSDevice model)
{
}

我也试过这个:

    public void Put(string id, [FromBody]iOSDevice model)
{
}

我已经试过了:

    public void Put(string id, [FromBody]string value)
{
}

当我这样做时,这些都不起作用:

string data = "<iOSDevice>xml_goes_here</iOSDevice>";
WebClient client = new WebClient();
client.UploadString(url, "PUT", data);

该操作拒绝触发我的 iOSDeviceXmlFormatter,它甚至不会将其读取为 [FromBody] 字符串。你如何让这个东西映射?

谢谢,

艾莉森

最佳答案

您是如何注册格式化程序的?您需要在第一个位置注册此格式化程序,以便它优先于 WebAPI 的默认格式化程序。代码如下所示:

config.Formatters.Insert(0, new iOSDeviceXmlFormatter());

这应该确保任何带有内容类型 application/xml 或类型 iOSDevice 的 text/xml 的请求都使用您的格式化程序进行反序列化。

关于c# - ASP.NET Web API PUT action 参数不携带,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14203791/

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