gpt4 book ai didi

c# - REST 服务中的 POST 请求为空

转载 作者:可可西里 更新时间:2023-11-01 16:41:27 26 4
gpt4 key购买 nike

我已经尝试将自己的 REST 服务作为 WCF 服务,但是当我尝试从客户端 POST 到该服务时遇到问题。

这是服务代码:

[ServiceContract]
public interface IBookService
{
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "AddBook/")]
string AddBook(HttpRequestMessage request);
}


public class BookService : IBookService
{
static IBookRepository repository = new BookRepository();

public string AddBook(HttpRequestMessage request)
{
try
{
// request is always empty.
var content = request.Content;
Book tempBook = JsonConvert.DeserializeObject<Book>(content.ReadAsStringAsync().Result);
repository.AddNewBook(tempBook);
}
catch (Exception ex)
{
//
}
return "AddBookTest";
}
}

这是客户端代码:

    var client = new HttpClient();
var url = new Uri("http://localhost:53258/");
client.BaseAddress = url;
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var tempBook = new Book() { BookId = 10, Title = "Title", ISBN = "123143234"};
var serializedBook = JsonConvert.SerializeObject(tempBook);
HttpContent content = new StringContent(serializedBook, Encoding.UTF8, "application/json");

var postResponse = _client.PostAsync("AddBook/", content).Result;

if (!postResponse.IsSuccessStatusCode)
// Always returns 400 Bad request.

POST 调用AddBook 方法,但HttpRequestMessage 对象始终为空:

enter image description here

我已经研究了几个小时,但我想不出另一个相对简单的解决方案。任何善良的灵魂都可以帮助我弄清楚我缺少什么?

编辑:Web.Config 代码:

<?xml version="1.0"?>
<configuration>

<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<services>
<service name="MyRestService.BookService" behaviorConfiguration="bookServiceBehavior">
<endpoint address=""
binding="webHttpBinding"
contract="MyRestService.IBookService"
behaviorConfiguration="RESTEndpointBehavior" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="RESTEndpointBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="bookServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>

最佳答案

这个答案成功了。我已经尝试过类似的东西,但我一定是错过了一些东西。

https://stackoverflow.com/a/6836030/4063668

我最终在我的界面中做了这个声明:

[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "AddBook/", BodyStyle = WebMessageBodyStyle.Bare)]
string AddBook(Book request);

关于c# - REST 服务中的 POST 请求为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34492597/

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