[英]C# Web API 2 app generates 404 on GET method when deployed to sub directory on IIS 7.5
我有一個問題讓我瘋了。
我在.net 4.5上用C#/ web API 2編寫了一個基本的web api。 只要我將站點部署到IIS 7.5的根目錄,它就可以正常工作 - 只要我將其部署到子目錄,我就會收到任何方法請求的404錯誤。
我的設置是這樣的:
我有一個名為ServicesController的控制器,具有以下方法:
public IEnumerable<Service> GetAllServices()
{
return Services;
}
public IHttpActionResult GetService(int id)
{
var Service = Services.FirstOrDefault((p) => p.Id == id);
if (Service == null)
{
return NotFound();
}
return Ok(Service);
}
}
}
我有一個像這樣的路由模板:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
如果我在fiddler中檢查請求,在根目錄(root目錄是localhost或wwwroot)上,請求看起來是正確的:
api / services / 1(例如)
在子目錄(稱為ServicesApp)中,請求會預先設置目錄名稱,(我認為?)可能是問題(或不是),如下所示:
ServicesApp / API /服務/ 1
在我的visual studio項目設置中是否需要更改以修改基本調用,或者它可能是其他內容? 我是一個網絡api 2新手,所以我確定它是一個小我不見了。
基於我在這里閱讀的其他帖子我試過的其他事情:
-iis集成模式在我的web.config中啟用
-i確實嘗試在web.config中添加runAllManagedModulesForAllRequests選項
我可以在IIS中創建一個子應用程序並將子目錄定義為根目錄,它可以正常工作,但這不是一個可行的選項,因為這將被部署到不允許這樣做的遠程/共享Windows主機功能水平。
任何幫助非常感謝。 如果我在搜索時錯過了明顯的答案,請提前道歉。
將應用程序移動到子文件夾后,根目錄中是否有不同的應用程序? web.config文件從父項應用程序繼承設置,因此如果您的父級正在定義設置並且您放置了定義相同設置的子應用程序,則可能會出現錯誤(取決於哪個設置)。
您還可以在IIS中右鍵單擊子應用程序並選擇“轉換為應用程序”嗎? 需要使用“添加應用程序”或“轉換為應用程序”在IIS中設置每個應用程序和“子”應用程序。
也許您需要與遠程/共享Windows主機的所有者交談,以了解如何通過它們執行此操作。 他們可能需要為每個應用程序另外訂閱。
此外,在IIS中您選擇webapi應用程序文件夾然后單擊“瀏覽”時會顯示哪條路徑,它應該打開一個瀏覽器,其中包含正確的路徑到應用程序的根目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.