当我尝试在LINQPad中使用Selfhosted WebAPI时,我一直得到同样的错误,即该类的控制器不存在。
我是否需要为WebAPI(控制器/类)创建单独的程序集,然后在我的查询中引用它们?
这是我正在使用的代码
#region namespaces
using AttributeRouting;
using AttributeRouting.Web.Http;
using AttributeRouting.Web.Http.SelfHost;
using System.Web.Http.SelfHost;
using System.Web.Http.Routing;
using System.Web.Http;
#endregion
public void Main()
{
var config = new HttpSelfHostConfiguration("http://192.168.0.196:8181/");
config.Routes.MapHttpAttributeRoutes(cfg =>
{
cfg.AddRoutesFromAssembly(Assembly.GetExecutingAssembly());
});
config.Routes.Cast<HttpRoute>().Dump();
AllObjects.Add(new UserQuery.PlayerObject { Type = 1, BaseAddress = "Hej" });
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
using(HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Console.WriteLine("Server open, press enter to quit");
Console.ReadLine();
server.CloseAsync();
}
}
public static List<PlayerObject> AllObjects = new List<PlayerObject>();
public class PlayerObject
{
public uint Type { get; set; }
public string BaseAddress { get; set; }
}
[RoutePrefix("players")]
public class PlayerObjectController : System.Web.Http.ApiController
{
[GET("allPlayers")]
public IEnumerable<PlayerObject> GetAllPlayerObjects()
{
var players = (from p in AllObjects
where p.Type == 1
select p);
return players.ToList();
}
}
这段代码在VS2012的单独控制台项目中正常运行。
当我无法使“普通”的WebAPI路由工作时,我开始使用NuGET来使用AttributeRouting。
我在浏览器中收到的错误是:No HTTP resource was found that matches the request URI 'http://192.168.0.196:8181/players/allPlayers'.
额外的错误:No type was found that matches the controller named 'PlayerObject'
config.Routes.Cast<HttpRoute>().LogTo(Console.Out);
。我确实看到路由URL: players/allPlayers GET, HEAD, OPTIONS
。因此,这似乎表明路由已正确设置。在浏览器中,我收到“未找到与控制器名称'PlayerObject'匹配的类型。”但这似乎不同于您的错误(可能与我的虚拟类太虚拟有关)。 - Frank van PuffelenSystem.Collections.Generic.IEnumerable``1[UserQuery+PlayerObject]
?也许WebAPI无法将UserQuery+PlayerObject
识别为普通的PlayerObject
类? - NoLifeKing