在Windows中安装OWIN服务不工作
本文关键字:服务 工作 OWIN 安装 Windows | 更新日期: 2023-09-27 18:14:27
我对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中我可以选择浏览)?
无法解析路由。
在我看来,你试图使用属性路由。
确保在Startup
类中配置了MapHttpAttributeRoutes
:
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/");
}