【发布时间】:2015-10-07 15:59:03
【问题描述】:
我想在没有 IIS 或其他东西的单声道 Linux 机器上用 WEB API 2 编写一个 REST-Server。
我做了什么:
- 创建了一个空的 C# 控制台应用程序
添加了用于处理 CORS 请求的 Nuget 包:Microsoft.AspNet.WebApi.OwinSelfHost、WebApi.Cors
-
然后我创建了一个 Startup.cs 来定义我的配置;
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(); } } } -
在这一步中,我添加了一个模型课本
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 机器上启动了整个应用程序 并使用“邮递员”应用程序测试应用程序以创建不同的 HTTP 请求。
我已经通过对 /api/books 的 GET 请求对服务器进行了测试,它成功了!
我的问题是当我执行 POST 请求时,我收到“500 内部服务器错误” 回复。
奇怪的是,当我在 .NET Framework 上的 Windows 机器上运行我的应用程序时,POST-Request 工作没有问题!
我不明白为什么它不能在单声道上工作!并希望有人知道答案。
【问题讨论】:
标签: c# asp.net linux asp.net-web-api mono