asp.net-web-api – 在LINQPad中使用WebAPI?
|
当我尝试在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. 浏览器中出现的错误是:没有找到符合请求URI’http://192.168.0.196:8181/players/allPlayers’的HTTP资源. 附加错误:没有找到与名为“PlayerObject”的控制器匹配的类型 解决方法默认情况下,Web API将忽略不公开的控制器,LinqPad类是公共的,我们在 scriptcs中也有类似的问题您必须添加自定义控制器解析器,这将绕过该限制,并允许您手动从执行的程序集中发现控制器类型. 这实际上已经固定(现在Web API控制器只需要可见不公开),但发生在9月,最新的稳定版本的自主主机是从8月份开始的. 所以,添加: public class ControllerResolver: DefaultHttpControllerTypeResolver {
public override ICollection<Type> GetControllerTypes(IAssembliesResolver assembliesResolver) {
var types = Assembly.GetExecutingAssembly().GetExportedTypes();
return types.Where(x => typeof(System.Web.Http.Controllers.IHttpController).IsAssignableFrom(x)).ToList();
}
}
然后注册你的配置,你完成了: var conf = new HttpSelfHostConfiguration(new Uri(address)); conf.Services.Replace(typeof(IHttpControllerTypeResolver),new ControllerResolver()); 这是一个完整的工作示例,我刚刚对LinqPad进行了测试.请注意,您必须以管理员身份运行LinqPad,否则您将无法在端口上侦听. public class TestController: System.Web.Http.ApiController {
public string Get() {
return "Hello world!";
}
}
public class ControllerResolver: DefaultHttpControllerTypeResolver {
public override ICollection<Type> GetControllerTypes(IAssembliesResolver assembliesResolver) {
var types = Assembly.GetExecutingAssembly().GetExportedTypes();
return types.Where(x => typeof(System.Web.Http.Controllers.IHttpController).IsAssignableFrom(x)).ToList();
}
}
async Task Main() {
var address = "http://localhost:8080";
var conf = new HttpSelfHostConfiguration(new Uri(address));
conf.Services.Replace(typeof(IHttpControllerTypeResolver),new ControllerResolver());
conf.Routes.MapHttpRoute(
name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional }
);
var server = new HttpSelfHostServer(conf);
await server.OpenAsync();
// keep the query in the 'Running' state
Util.KeepRunning();
Util.Cleanup += async delegate {
// shut down the server when the query's execution is canceled
// (for example,the Cancel button is clicked)
await server.CloseAsync();
};
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在iis6.0中更改asp.net版本
- asp.net-mvc-4 – 在MVC 4中创建下拉列表的最佳方法是什么?
- .net – Razor RTM中的声明性助手方法
- asp.net-core – ASP.NET Core中的System.Data.Entity.Spat
- asp.net – 在页面加载中实现IsPostBack
- 验证 – 如何强制MVC验证IValidatableObject
- asp.net – 如何在使用edmx文件时在连接字符串中指定元数据
- asp.net – 共享.NET应用程序池
- asp.net – Azure网站301重定向 – 我放在哪里?
- asp.net-mvc – 如何将MVC路由添加到特定控制器?
- asp.net-mvc – DisplayFormat未应用于十进制值
- asp.net-mvc – Visual Studio断点未被击中
- asp.net-mvc – NUnit中的MbUnit的行属性?
- ASP.NET WebSite发布与复制?
- asp.net-mvc – .Net 4内存缓存类和用户会话
- 有没有任何好的ASP.NET MVC2或MVC3作弊表?
- asp.net – 循环访问复选框列表
- ASP.NET的BlogEngine.Net堆栈到WordPress?
- asp.net-mvc – 部署AntiforgeryToken错误
- asp.net-mvc – Html.Raw()在ASP.NET MVC Razor视
