C# ASP.NET Web API在IIS中发布时不工作?

C# ASP.NET Web API在IIS中发布时不工作?,c#,asp.net-web-api,C#,Asp.net Web Api,当我从Visual Studio运行或浏览ASP.NET Web API时,我构建了一个ASP.NET Web API,它工作正常,但当我在IIS中托管它并尝试浏览它时,它不工作,并出现以下错误: HTTP 400错误不是你的错,是这个链接的错(看起来好像断了) 这里是我发布web服务的地方 API方法是 [HttpGet] [Route("findall")] public HttpResponseMessage findAll() { try

当我从Visual Studio运行或浏览ASP.NET Web API时,我构建了一个ASP.NET Web API,它工作正常,但当我在IIS中托管它并尝试浏览它时,它不工作,并出现以下错误:

HTTP 400错误不是你的错,是这个链接的错(看起来好像断了)

这里是我发布web服务的地方

API方法是

 [HttpGet]
    [Route("findall")]
    public HttpResponseMessage findAll()
    {
        try
        {
            var response = new HttpResponseMessage(HttpStatusCode.OK);
            response.Content = new StringContent(JsonConvert.SerializeObject(mde.Products.ToList()));
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            return response;

        }
        catch
        {
            return new HttpResponseMessage(HttpStatusCode.BadRequest);
        }
    }
我向其发送以下请求:

http://localhost:9810/api/product/findall

如何解决此问题?

根据屏幕截图,您已将应用程序部署为默认站点上的虚拟应用程序。而/myserver被定义为虚拟路径。这意味着您的API根URL将是:

http://localhost:{IIS_PORT}/myserver/{YOUR_APP_ROUTES}
默认网站端口为80;如果您的帖子()中的URL在IIS express上正常工作,请尝试为您的IIS部署调用此URL:

http://localhost/myserver/api/product/findall

根据屏幕截图,您已将应用程序部署为默认站点上的虚拟应用程序。而/myserver被定义为虚拟路径。这意味着您的API根URL将是:

http://localhost:{IIS_PORT}/myserver/{YOUR_APP_ROUTES}
默认网站端口为80;如果您的帖子()中的URL在IIS express上正常工作,请尝试为您的IIS部署调用此URL:

http://localhost/myserver/api/product/findall

在命令提示符下执行此命令

%windir%\Microsoft.NET\Framework\v4.0.21006\aspnet\u regiis.exe-i


对我来说,它解决了这个问题

在命令提示符下执行这个命令

%windir%\Microsoft.NET\Framework\v4.0.21006\aspnet\u regiis.exe-i


对我来说,它解决了这个问题

您能提供失败的请求以及您希望处理该请求的API方法吗?另外,设置
customErrors=“Off”
有时可能会提供有关错误的更多详细信息。@ImantasSankalas我编辑了这篇文章,并提供了您要求的信息。而不是用
catch
(all)来抑制异常,您可能希望记录或临时输出导致您响应
BadRequest
的异常。也就是说,
catch(异常e){/*使用“e”*/}
。首先,我只需删除try-catch块,让服务器输出异常详细信息。端口是否正确?看来您的请求中一定是“80”。@Imantas非常感谢您。。。您的评论帮助我找到了问题所在,即我应该将IIS用户添加到sql Server中的登录中。您能否提供失败的请求以及希望处理该请求的API方法?另外,设置
customErrors=“Off”
有时可能会提供有关错误的更多详细信息。@ImantasSankalas我编辑了这篇文章,并提供了您要求的信息。而不是用
catch
(all)来抑制异常,您可能希望记录或临时输出导致您响应
BadRequest
的异常。也就是说,
catch(异常e){/*使用“e”*/}
。首先,我只需删除try-catch块,让服务器输出异常详细信息。端口是否正确?看来您的请求中一定是“80”。@Imantas非常感谢您。。。您的评论帮助我找到问题所在,即我应该将IIS用户添加到sql server中的登录