Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IIS 7.5中的ASP.NET核心WebAPI 500内部错误_C#_Asp.net_Iis_Asp.net Web Api_Asp.net Mvc 5 - Fatal编程技术网

C# IIS 7.5中的ASP.NET核心WebAPI 500内部错误

C# IIS 7.5中的ASP.NET核心WebAPI 500内部错误,c#,asp.net,iis,asp.net-web-api,asp.net-mvc-5,C#,Asp.net,Iis,Asp.net Web Api,Asp.net Mvc 5,我正在努力让这个WebAPI正常工作。好吧,与IIS合作。在IIS express中一切正常,但当我发布它时,特别是1个api请求不起作用。我正在尝试访问API/[Controller]/{date}/{integer}的url。我一直收到500服务器错误。我的另一条路径是API/[Controller]/{date}工作 这是我的API控制器: [Route("api/[controller]")] public class PostingsController : Controlle

我正在努力让这个WebAPI正常工作。好吧,与IIS合作。在IIS express中一切正常,但当我发布它时,特别是1个api请求不起作用。我正在尝试访问
API/[Controller]/{date}/{integer}
的url。我一直收到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;
        }
    }

这是一个很好的想法,可能是因为您正在返回一个列表。我们有工作的核心Web API方法,所有这些方法都返回
Task
。尝试将返回类型
列表
更改为
任务

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

显然,在生产环境中,这不是您想要的

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


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

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

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

这是链接。


如果您最终查看了它,并提出了一些建议或意见,我很乐意听取他们的意见。

您是否查看了服务器的事件日志?通常,500是由异常引起的,通常您可以在IIS计算机上的
应用程序日志中找到这些详细信息。您可以调查字符串日期的使用情况parameter@Infer-你什么意思?@CodingGorilla日志没有任何特别的内容。只是一些空闲日志和一些404。语法正确吗?e、 我可以先传入一个字符串参数,然后传入一个整数吗?({date}是字符串,{modeID}是int)现在,我还没有在startup.cs文件中进行任何WebAPI映射。我已经为应用程序本身做了1个映射。这就是为什么要使用
if(env.IsDevelopment())
,这样就不必添加和删除
dev异常页面
是的,但我不知道他是如何发布他的项目的,所以我没有设置环境变量来实现这一点。再想一想,我可能应该这么做。我将更新答案以显示这一点。好的,我已经缩小了范围。这与我返回的对象列表有关。我发现了这一点,因为如果我只返回一个包含几个字符串的简单列表,它就可以正常工作。我不知道如何调试它。app.usedeveloperception页面不会改变任何内容。它需要以什么顺序进入?@ClintB好的,我得到了显示的错误消息。问题不是我返回的列表,而是我用来获取数据的SqlClient。上面写着“无法加载DLL”mycpu path\sni.DLL。有什么想法吗?@ClintB刚刚想出来。我是用dnx-CORECRL-x64而不是x86发布应用程序的。谢谢你们的帮助!
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));
            }
app.UseDeveloperExceptionPage();   
if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}