ASP.NET Core WebAPI 500 Internal error in IIS 7.5

匿名 (未验证) 提交于 2019-12-03 01:38:01

问题:

I'm struggling to get this WebAPI to work. Well, work with IIS. Everything works fine in IIS express, but when I publish it, specifically 1 api request doesn't work. I'm trying to access a url of API/[Controller]/{date}/{integer}. I keep getting the 500 server error. My other route of API/[Controller]/{date} works.

Here's my API Controller:

[Route("api/[controller]")]     public class PostingsController : Controller     {         // GET: api/Postings/5         [HttpGet("{date}")]         public string Get(string date)         {             return date;         }          // GET api/Postings/20160407/2         [HttpGet("{date}/{modeID}")]         public List<TruckPosting> Get(string date, int modeID)         {             TruckPosting tp = new TruckPosting();             List<TruckPosting> truckPostings = tp.GetTruckPostings(date, modeID);             return truckPostings;         }     } 

Could the reason be that I'm trying to return a List<>? I'm stumped considering it works fine in VS's IIS Express.

Edit

Here's my startup.cs page:

public void ConfigureServices(IServiceCollection services)         {             services.AddMvc();         }  public void Configure1(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)             {                 app.UseIISPlatformHandler();                 app.UseDefaultFiles();                 app.UseStaticFiles();                 app.UseFileServer(true);                 app.UseMvc();             }              // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)             {                 app.Map("/appRoot", (app1) => this.Configure1(app1, env, loggerFactory));             } 

回答1:

That's a good thought that it might that fact that you're returning a List. We have working Core Web API methods and all of them return Task<IEnumerable<Foo>>. Try changing the return type List<TruckPosting> to Task<IEnumerable<TruckPosting>>

EDIT: To view the details for 500 (internal server) errors you will need to put the following line of code at the beginning of your Configure (or Configure1) method:

app.UseDeveloperExceptionPage();    

And obviously this is not something you want in a production environment.

EDIT2: When running in VS you can use the code below to show exception details as long as the Hosting:Environment variable in the Debug section of Properties is set to "Development". After publishing you will need to create a System Environment variable named ASPNET_ENV and set its value to "Development" or the code will not call the UseDeveloperExceptionPage() method.

if (env.IsDevelopment()) {     app.UseDeveloperExceptionPage(); } 


回答2:

I posted an ASP.NET Core custom exception handler on GitHub today. I thought it might be helpful to you since you're building an SPA and are probably calling a lot Web API methods.

It's a middleware project that returns error messages for Web API calls and redirects to an error page for non Web API calls. It can also log the exceptions in a SQL Server database. That's done in a separate thread to help with performance.

The solution includes a demo application that shows how to use the exception handler for both Web API exceptions and non Web API exceptions.

Here's the link.
https://github.com/ClintBailiff/CustomExceptionHandler

If you end up checking it out and have some suggestions or comments, I like to hear them.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!