[英]Connecting to WebAPI2 endpoints(routes) throw Http code 503 for a controller and another controller works fine
我正在使用Owin自托管WebAPI2。 我有兩個控制器類並使用屬性路由。 其中一人簽名如下:
[RoutePrefix("api/v1/devices")]
public class DeviceController : ApiController
{
[HttpPost]
[Route("")]
public async Task<HttpResponseMessage> DevicePresence()
{
...
}
[HttpGet]
[Route("updates/{deviceID}")]
public HttpResponseMessage GetDeviceUpdates(string deviceID)
{
...
}
}
這個工作正常,動作方法被觸發。
另一個控制器具有以下簽名:
[RoutePrefix("device/class")]
public class RemoteController : ApiController
{
[HttpGet]
[Route("remotehost")]
public HttpResponseMessage RemoteHost()
{
...
}
[HttpGet]
[Route("version")]
public HttpResponseMessage GetVersion()
{
...
}
}
當我嘗試連接到其中任何一個時,我得到503(服務不可用)響應。
我的Startup類初始化如下:
public class Startup
{
public static void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.EnsureInitialized();
app.UseWebApi(config);
}
}
我試圖使用傳統的路由,但仍然是同樣的問題。
config.Routes.MapHttpRoute(
name: "RemoteApi",
routeTemplate: "device/{controller}/{action}"
);
public class ClassController : ApiController
{
public HttpResponseMessage GetVersion()
{
...
}
}
這也是投擲503狀態代碼如果我在第二個控制器中更改路由前綴如下,那么它正在工作:
[RoutePrefix("api/v1/device/class")]
public class RemoteController : ApiController
{
...
}
根據我的要求,我無法更改端點。
我不確定這里有什么問題,我們非常感謝任何幫助。
您的RemoteController會拋出異常,因為您不遵循WEB API的命名約定。 你的RemoteHost()方法是一個get方法必須有一個“Get”前綴,所以它的名字實際上應該是GetRemoteHost() 。 那應該解決它。
如果要更改命名約定,可以在global.asax
文件中修改路由定義:
Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "get", id = RouteParameter.Optional }
);
希望有所幫助。
我意識到這不是webapi或路由的問題。 實際上,我正在為URL添加防火牆例外,並且不知何故它沒有從防火牆設置中刪除並在DACL中保留一個條目。 我從cmd提示符中刪除了它,現在一切正常。
抱歉打擾...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.