c# – Web API 2 POST-Request无法处理单声道
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Web API 2 POST-Request无法处理单声道,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2847字,纯文字阅读大概需要5分钟。
内容图文
我想在Linux机器上编写带有WEB API 2的REST服务器,单声道没有IIS或其他东西.
我做了什么:
>创建了一个空的C#控制台应用程序
>添加了Nuget-Package:Microsoft.AspNet.WebApi.OwinSelfHost,WebApi.Cors用于处理CORS-Request
>然后我创建了一个Startup.cs来定义我的Config;
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseWebApi(ConfigureWebApi());
}
private HttpConfiguration ConfigureWebApi()
{
var config = new HttpConfiguration();
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
//Attribute Routing aktivieren
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
"DefaultApi",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
return config;
}
}
>编辑我的Program.cs以充当服务器
class Program
{
static void Main(string[] args)
{
string baseUrl = "http://*:5000";
using (WebApp.Start<Startup>(baseUrl))
{
Console.WriteLine("Press Enter to quit.");
Console.ReadKey();
}
}
}
>在此步骤中,我添加了一个Model Class Book
public class Book
{
public String Name { get; set; }
public String Author { get; set; }
public int Id { get; set; }
}
>最后应该处理请求的BooksController:
public class BooksController : ApiController
{
public BooksController()
{}
public async Task<IHttpActionResult> Get()
{
List<Book> list = new List<Book>();
list.Add(new Book() { Name = "myBook",Author = "John" ,Id=1});
list.Add(new Book() { Name = "myBook2",Author = "Peter",Id=2 });
return Ok(list);
}
public async Task<IHttpActionResult> Post(Book requestData)
{
return Created<Book>("api/books/" + requestData.Id, requestData);
}
}
我在带有mono-4.0.2的Linux机器上启动了整个应用程序
并使用“postman”-Application测试应用程序以创建不同的HTTP请求.
我已经通过GET-Request to / api / books测试了服务器,它运行良好!
我的问题是,当我执行POST请求时,我得到“500内部服务器错误”
响应.
我的POST-Request看起来像这样
奇怪的是,当我在.NET Framework上的Windows机器上运行我的应用程序时,POST-Request工作没有问题!
我不明白为什么它不单声道!希望有人知道答案.
解决方法:
正如您在自己的回答中所说,问题在于Mono中的CORS实现.
如果您需要CORS,可以使用解决方法.这就是我所做的,改编自这个要点:https://github.com/SEEK-Jobs/whatsupwithmono/issues/6
/// <summary>
/// Work around a bug in mono's implementation of System.Net.Http where calls to HttpRequestMessage.Headers.Host will fail unless we set it explicitly.
/// This should be transparent and cause no side effects.
/// </summary>
private class MonoPatchingDelegatingHandler : DelegatingHandler {
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
request.Headers.Host = request.Headers.GetValues("Host").FirstOrDefault();
return await base.SendAsync(request, cancellationToken);
}
}
然后在调用config.EnableCors之前的ConfigureWebApi中,执行以下操作:
if(Type.GetType("Mono.Runtime") != null) {
config.MessageHandlers.Add(new MonoPatchingDelegatingHandler());
}
config.EnableCors();
内容总结
以上是互联网集市为您收集整理的c# – Web API 2 POST-Request无法处理单声道全部内容,希望文章能够帮你解决c# – Web API 2 POST-Request无法处理单声道所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。