ASP.NET Web API无法在Azure上运行

bwitn5fc  于 2023-11-21  发布在  .NET
关注(0)|答案(5)|浏览(133)

如果Web API在本地主机上工作,为什么它会停止在Azure网站上工作。
错误是**加载资源失败:服务器响应状态为404(Not Found)您正在查找的资源已被删除、名称已更改或暂时不可用。**在浏览器中将URL粘贴到API时。

**注意:**我从来没有遇到过这个错误,我已经有几个网站已经在Azure上使用Web API属性路由。
WebConfig

public static void Register(HttpConfiguration config)
        {

            config.MapHttpAttributeRoutes();

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

字符串

路由配置

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
             name: "Cities",
             url: "Cities/{id}/{name}/{action}",
             defaults: new { controller = "Cities", action = "Index" }
           );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );         
        }

全局.asax

AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 

            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);


Goggling透露,这是一个常见的问题:
HTTP 404 Page Not Found in Web Api hosted in IIS 7.5
WebAPI DELETE request return 404 error in Azure
WebApi and ASP.NET 4 routing issues
https://stackoverflow.com/questions/15805471/using-windows-azure-websites-with-extensionlessurlhandler
Configuring IIS methods for ASP.NET Web API on Windows Azure Websites
How Extensionless URLs Are Handled By ASP.NET v4
Getting 404 from WebAPI on Windows Azure Web Sites
ASP.NET MVC 4 and Web API in Azure - No HTTP resource was found
MVC 4.5 Web API路由不工作?

更新

在尝试了上面链接中建议的每一种方法后,我已经从解决方案中删除了所有的 *. dll,创建了一个新的MVC+Web API项目,并将 *. dll添加到解决方案中。构建和一切都按预期进行。

uhry853o

uhry853o1#

你试过这个设置吗?

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

字符串

62o28rlo

62o28rlo2#

试试下面两种方法。

**方法1.**尝试如下设置web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
  <remove name="aspNetCore"/>
  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
  <aspNetCore processPath="dotnet" arguments=".\Somerandomname.WebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>

字符串
有关详细信息,请参阅ASP.NET Core Web API runs locally but not on Azure app service

**方法2.**请确保您在浏览器中的网址是正确的。在某些情况下,您需要添加

azureAPIurl/api/用户名

yptwkmov

yptwkmov3#

和@Matija Grcic一样,我在Azure上成功部署了一个Web API应用多次后,在新部署中碰到了**“您要查找的资源已被删除..”**的问题,我从下面三个程序集中找到了混合版本问题的罪魁祸首:
System.Net.Http.dll
System.Net.Http.Formating.dll
System.Net.Http.WebRequest.dll
我注意到,我的项目引用这些程序集设置为从全局缓存使用它们,然后在部署中没有复制到Azure。但我也发现,在我的应用程序的错误日志中,它正在抱怨找不到它们。最后一条线索:它们存在于我的开发机器的目录中。
我将它们从development目录中删除,并在Web.config的runtime>assemblyBinding>dependentAssembly部分中明确提到了这些程序集。
然后使用FTP手动将引用的三个程序集复制到Azure中的bin文件夹中,瞧!我的Web API正在工作!
我猜Azure环境中有新版本的新Web应用程序(在写这篇文章的时候是.Net 4.7),我的旧Visual Studio项目可能正在构建MVC和Web API,希望使用旧版本。这样,尝试使用和引用较新的.Net框架创建新项目一定会有所帮助,就像@Matija Grcic所做的那样。

jyztefdp

jyztefdp4#

我已经通过从.net Framework 4.6.1更改到4.6.2解决了这个问题。现在它对我有效

jaql4c8m

jaql4c8m5#

确保没有任何文件意外地从项目中排除-特别是检查Global.asax和Global.asax.cs。排除的文件不会发布,因此可以在本地工作,但不能在Azure上工作。

相关问题