IIS 7.5中的ASP.NET Core WebAPI 500内部错误

时间:2016-04-07 17:47:41

标签: c# asp.net iis asp.net-web-api asp.net-mvc-5

我努力让这个WebAPI工作。好吧,使用IIS。在IIS express中一切正常,但是当我发布它时,特别是1 api请求不起作用。我试图访问API/[Controller]/{date}/{integer}的网址。我一直收到500服务器错误。我的API/[Controller]/{date}的其他路线有效。

这是我的API控制器:

[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;
        }
    }

原因可能是我试图返回一个List&lt;&gt;?考虑到它在VS的IIS Express中运行良好,我感到难过。

修改

这是我的startup.cs页面:

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));
            }

2 个答案:

答案 0 :(得分:8)

这是一个很好的想法,你可能会返回一个List。我们有工作的Core Web API方法,所有这些方法都返回Task<IEnumerable<Foo>>。尝试将返回类型List<TruckPosting>更改为Task<IEnumerable<TruckPosting>>

编辑:要查看500(内部服务器)错误的详细信息,您需要将以下代码行放在Configure(或Configure1)方法的开头:

app.UseDeveloperExceptionPage();   

显然,这不是你想要的生产环境。

EDIT2:在VS中运行时,只要“属性”的“调试”部分中的“Hosting:Environment”变量设置为“&#34;开发&#34;”,就可以使用下面的代码显示异常详细信息。发布后,您需要创建一个名为ASPNET_ENV的系统环境变量,并将其值设置为&#34;开发&#34;或者代码不会调用UseDeveloperExceptionPage()方法。

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

答案 1 :(得分:0)

我今天在GitHub上发布了一个ASP.NET Core自定义异常处理程序。我认为它可能对您有所帮助,因为您正在构建SPA并且可能正在调用很多Web API方法。

它是一个中间件项目,它返回Web API调用的错误消息,并重定向到非Web API调用的错误页面。它还可以记录SQL Server数据库中的异常。这是在一个单独的线程中完成的,以帮助提高性能。

该解决方案包含一个演示应用程序,该应用程序演示如何对Web API异常和非Web API异常使用异常处理程序。

这是链接。
https://github.com/ClintBailiff/CustomExceptionHandler

如果您最终查看并提出一些建议或意见,我希望听到它们。