當我試圖在LINQPad中使用Selfhosted WebAPI時,我只是不斷收到類似控制器不存在的錯誤。在LINQPad中使用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晴好時的代碼。
我開始使用通過NuGET的AttributeRouting,當我沒有得到「正常的」WebAPI路由工作。
我在瀏覽器中得到的錯誤是: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'
我公司生產的LINQ腳本與您的代碼(在缺少的部分填充一些虛擬類/方法),並加入'config.Routes.Cast().LogTo(Console.Out);'。我確實看到路線'URL:players/allPlayers GET,HEAD,OPTIONS'。這似乎表明路線設置正確。我確實沒有找到與瀏覽器中名爲'PlayerObject'的控制器相匹配的類型,但這與您的錯誤看起來不同(可能與我的虛擬類太虛擬相關)。 –
我甩掉了路線,我可以看到他們已經註冊,但是當試圖進入頁面時,我仍然遇到了錯誤。我發佈了一個產生錯誤的新代碼。 – NoLifeKing
@FrankvanPuffelen我確實得到了和你一樣的錯誤,但只有在LINQPad中,當我將它移入VS2012時,它開始無障礙地工作。我總是可以開始使用VS,但LINQPad中.Dump()的簡單性對我來說很有價值。因爲我也使用我的筆記本電腦作爲此webapi的「客戶端」。 :) – NoLifeKing