asp.net-web-api – 在LINQPad中使用WebAPI?
发布时间:2020-12-15 23:35:16 所属栏目:asp.Net 来源:网络整理
导读:当我尝试在LINQPad中使用Selfhosted WebAPI时,我只是不断收到与该类的控制器不存在相同的错误. 我必须为WebAPI(控制器/类)创建单独的程序集,然后在我的查询中引用它们吗? 这是我正在使用的代码 #region namespacesusing AttributeRouting;using AttributeRo
当我尝试在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(); }; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Windbg程序调试系列-索引篇
- asp.net-mvc – Html.EditorFor SelectList
- asp.net-mvc – ASP.NET MVC(4) – 按特定顺序绑定属性
- asp.net – 问题检查后面的代码中的单选按钮
- asp.net-mvc – MVC3 – 将字节数组发布到控制器 – Databa
- 在Asp.net mvc5中使用用户名而不是电子邮件身份
- .net – 关于强名称验证跳过的奇怪问题
- asp.net-web-api – MVC Core ZipArchive无效
- asp.net-mvc-3 – 禁用ASP.NET-MVC3中的unicode字符编码
- asp.net – 多个客户端应该有一个项目副本,还是每个客户端都
推荐文章
站长推荐
- ASP.NET 4中仍然需要App_Browsers文件夹吗?
- asp.net-web-api – Windows.Web.Http.HttpClien
- asp.net-mvc – !ClrStack -a调用ASP.NET MVC应
- asp.net-mvc-3 – MVC3:不将属性映射到DB列的属
- asp.net – 您如何看待Postgres和Firebird数据库
- asp.net-mvc – ASP.NET成员资格替代方案
- asp.net – 是否可以访问位于另一个项目的MVC视图
- asp.net – 在project.json中排除文件夹
- asp.net-core – CoreCLR中的哈希算法
- asp.net-mvc – asp.net mvc授权使用角色
热点阅读