请帮助,我正在尝试自我托管网络API。
当同一个控制器托管在一个Web项目上,并通过F5在dev上运行时,一切运行良好。
然而现在我正试图自我托管相同,我得到411和404. 411,当我使用Fiddler连接时,404当我尝试通过另一个库连接时。
这是应该托管服务的控制台应用程序:
class Program
{
static int portNumber;
static void Main(string[] args)
{
portNumber = 8089;
var config = new HttpSelfHostConfiguration(
string.Format("http://localhost:{0}", portNumber));
config.Routes.MapHttpRoute(
"API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });
using (var server = new HttpSelfHostServer(config))
{
var test = new RetrieveGuidService().Execute(Unit.Instance);
server.OpenAsync().Wait();
Console.ReadLine();
}
}
}
这就是我的控制器的样子,它没有做任何事情只是一个测试。
public class RetrieveGuidServiceController : ApiController
{
public virtual Guid PostExecute(Unit request)
{
IQueryService<Unit,Guid> queryService = new RetrieveGuidService();
return queryService.Execute(request);
}
}
以下是我试图通过fiddler访问它的方式:
当服务托管在Web项目上时,同样有效。我几乎遵循了这个教程:asp.net WebApi self host tutorial,其中包括运行nugget脚本,添加依赖项等等。
我还缺少什么?
答案 0 :(得分:2)
411是因为你没有放入Content-Length标题。即使您没有发送内容,也需要包含Content-Length:0。
关于让控制器处于正确的程序集中,我的行为不一致。在某些项目中,它似乎在其他项目中不起作用。不确定我做错了什么。我有一个项目here同时使用不同程序集中的所有控制器同时执行Web主机和自主机,并且它可以正常工作。
答案 1 :(得分:1)
默认情况下,服务似乎不会在托管服务的程序集之外的程序集中查找控制器。
我认为这是一个遗漏,除非我正在阅读规范。