作为一种技术,我对OWIN很陌生。我有一个服务,我的路由看起来像这样:
[Route("myMessage/{message}")]
[AcceptVerbs("GET", "POST")]
[HttpPost]
public void myMessage(string message)
我安装了这样的服务:
installutil My.Service.exe
并检查该服务是否在Windows(8)下运行。
但是,当我尝试导航到此URI http://localhost:1010/myMessage/test
我收到404错误。有没有办法调试或查看这是否正确运行(例如,在IIS中我可以选择浏览)?
答案 0 :(得分:0)
您的路线无法解决。
在我看来,您正在尝试使用attribute routing。
确保您在MapHttpAttributeRoutes
课程中配置Startup
:
class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
appBuilder.UseWebApi(config);
}
}
正如您所看到的,我已禁用标准路由系统(config.Routes.MapHttpRoute
),因为我更喜欢定义自己的路由。
现在,您的api控制器必须具有一个属性,您可以使用RoutePrefix
为路线配置前缀。
通常你会使用一些api/controller
命名:
[RoutePrefix("api/messages")]
您的控制器应如下所示:
[RoutePrefix("api/messages")]
public class MessagesController : ApiController
{
[Route("myMessage/{message}")]
[AcceptVerbs("GET", "POST")]
[HttpPost]
public string myMessage(string message)
{
return message;
}
}
您的控制器名称甚至可能完全不同:
public class FooController : ApiController
{
}
因为现在重要的是RoutePrefix
。
您的控制器现在应该能够接受以下请求:
localhost:<port>/api/messages/myMessage/<yourmessage>
不要忘记在ServiceBase
中定义正确的端口:
protected override void OnStart(string[] args)
{
myServer = WebApp.Start<Startup>(url: "http://localhost:1010/");
}