gpt4 book ai didi

C# WCF Web API 发布/放置问题

转载 作者:可可西里 更新时间:2023-11-01 17:14:31 24 4
gpt4 key购买 nike

我有一个看起来像这样的网络服务:

[WebInvoke(UriTemplate = "/{userName}/?key={key}&machineName={machineName}", Method = "PUT")]
public HttpResponseMessage<SomeStuffPutResponse> PutSomeStuff(string userName, string key, string machineName, string theTextToPut)
{
// do stuff
}

我的 global.asx 看起来像:

RouteTable.Routes.MapServiceRoute<SomeStuffService>("1.0/SomeStuff", new HttpHostConfiguration());

当我通过 C# HttpClient 或 fiddler 访问 web 服务时,它会抛出 500,甚至没有进入我的方法。我添加了一堆日志记录并收到以下错误:

The service operation 'PutSomeStuff' expected a value assignable to type 'String' for input parameter 'requestMessage' but received a value of type 'HttpRequestMessage`1'.

更新:如果我将 TextToPut 变量设为自定义对象,它就可以正常工作。如果它是像字符串这样的原始类型,它只会给我带来问题。

最佳答案

解决方案 1。

您可以将 theTextToPut 参数更改为 HttpRequestMessage,然后读取消息的内容。

[WebInvoke(UriTemplate = "/{userName}/?key={key}&machineName={machineName}", Method = "PUT")]
public HttpResponseMessage<SomeStuffPutResponse> PutSomeStuff(string userName, string key, string machineName, HttpRequestMessage request)
{
string theTextToPut = request.Content.ReadAsString();
}

解决方案 2。

如果您真的想获取字符串形式的参数,您可以创建一个操作处理程序来处理所有名为“theTextToPut”的字符串参数。

public class TextToPutOperationHandler : HttpOperationHandler<HttpRequestMessage, string>
{
public TextToPutOperationHandler()
: this("theTextToPut")
{ }

private TextToPutOperationHandler(string outputParameterName)
: base(outputParameterName)
{ }

public override string OnHandle(HttpRequestMessage input)
{
return input.Content.ReadAsString();
}
}

然后您在 Global.asax 中设置您的服务如下:

RouteTable.Routes.MapServiceRoute<SomeStuffService>("1.0/SomeStuff",
new HttpHostConfiguration().AddRequestHandlers(x => x.Add(new TextToPutOperationHandler())));

关于C# WCF Web API 发布/放置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462176/

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