我是WebApi的新手,我們需要創建\維護令牌發佈Web服務。我的一位同事提供了他允許我使用的解決方案(測試版)。如果我從我的開發環境(VS 2012)運行Web服務,我可以查詢它並從Web瀏覽器(Chrome)獲取令牌。然後我編寫了一個測試應用程序來使用HttpClient查詢服務並獲取令牌。這可以從託管在我的開發環境中的服務正常工作,但如果我嘗試使用我的小測試應用程序在IIS中託管時查詢它,我會得到'404 Not Found'異常。但是令我費解的是,如果我通過chrome連接到託管在IIS中的Web服務,它的工作原理是什麼?HttpClient在IIS 7.5上調用WebApi服務 - 404未找到
我的控制器方法如下:
[HttpGet]
public IHttpActionResult GetToken(string username, string password, string realm)
{
return Json("TOKEN-STRING");
}
而且我的配置:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<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" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,PUT,DELETE,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,PUT,DELETE,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
</handlers>
我有我的應用程序池設置爲IIS中的 '綜合'。
我的邏輯告訴我,如果我能夠從Chrome中取回令牌但不從我的應用中取回令牌,那麼IIS應該沒有問題,而是應用中的config \ setting \ programming錯誤。
這裏是小法我寫獲得令牌:
async private void GetToken()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost/TokenServer/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync("/api/TokenServer/GetToken/name/password/realm").Result;
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
//Error handling
return;
}
//Extract token from response
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
Token = DeserializeJsonToken(result);
}
我已閱讀並嘗試了許多建議,但沒有人可以爲我工作。我一直堅持這一兩天現在,截止日期是匍匐:)
的Tx
你能分享你的web api路由配置是怎樣的嗎? –
'config.Routes.MapHttpRoute( name:「TokenServerController」, routeTemplate:「api/{controller}/{action}/{username}/{password}/{realm}」, 默認值:new {password = RouteParameter .Optional,realm = RouteParameter.Optional});' – Cal