我的WebApi在Visual Studio上可以正常工作,但在IIS上无法工作。

4

我在SO和互联网上找到了很多相同的问题。然而,它们都不是我的问题的解决方案(至少是我目前看到的解决方案)。因此,我需要你的帮助。

我创建了一个WebApi,其中包含以下列表,在从Visual Studio运行时它能够正常工作。但是,当我将其发布到自己机器的IIS上时,它就无法工作了。

它给出了HTTP Error 404.0 - Not Found错误。

  • 操作系统:Windows 7
  • IDE:Visual Studio 2013
  • IIS:版本7.5

这是web.configsystem.webServerapplicationSettings部分:

          <system.webServer>
            <validation validateIntegratedModeConfiguration="false"/>
            <modules runAllManagedModulesForAllRequests="true"/> 
            <handlers>
              <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
              <remove name="OPTIONSVerbHandler" />
              <remove name="TRACEVerbHandler" />
              <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*"
     type="System.Web.Handlers.TransferRequestHandler" 
preCondition="integratedMode,runtimeVersionv4.0" />
            </handlers>
          </system.webServer>
          <applicationSettings>
            <SampleAspNetWebApi.Properties.Settings>
              <setting name="AuthorityAddress" serializeAs="String">
                <value>https://localhost:44333/core</value>
              </setting>
              <setting name="SampleAspNetWebApi_SmsPanel_SMS" serializeAs="String">
                <value>http://something.com/smsws/soap.asmx</value>
              </setting>
            </SampleAspNetWebApi.Properties.Settings>
          </applicationSettings>

这是路由地图:

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "{controller}/{action}",
        defaults: new { id = RouteParameter.Optional }
    );

最后,这是我为测试目的创建的控制器:

public class TestController : ApiController
{
    public string Get()
    {
        return "Just for test";
    }
}

更新:

应用程序高级设置

输入图像描述

这些图片展示了应用程序的高级设置和输入图像描述。

如果你正在使用以 Get 开头的公共方法,那么 [HttpGet] 就毫无用处了。 - Orel Eraki
仅显示web.config是无用的。您需要显示IIS设置,例如站点绑定。 - Lex Li
@LexLi 请查看我的更新,并告诉我还需要哪些细节。提前感谢您。 - Mehrdad Kamelzadeh
这应该就足够了。1)尝试使用aspnet_regiis.exe在IIS上注册ASP.NET 4。文档详细说明了如何操作,所以您应该能够搜索并知道如何操作。2)启用失败请求跟踪以跟踪404错误(如果仍然存在)。 - Lex Li
我找到了问题,但是我无法弄清原因。当我使用Visual Studio部署工具时,出现了问题,但是当我手动将“bin”文件夹复制到IIS引用的文件夹路径中时,问题得到解决。很奇怪吧?我之前已经注册了ASP.NET。 - Mehrdad Kamelzadeh
1个回答

0
在您的IIS/网站主机名中,您需要添加一些主机名,例如mytestapi(您从IIS设置中分享的最后一张图片)。
然后将其添加到系统的主机文件(C:\Windows\System32\drivers\etc\hosts)中:
127.0.0.1 mytestapi
然后从此URL测试您的API: http://mytestapi/api/yourapicontroller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接