Tag: asp.net web api routing

具有多个参数的Web API路由

我正在尝试找出如何为以下Web API控制器进行路由: public class MyController : ApiController { // POST api/MyController/GetAllRows/userName/tableName [HttpPost] public List GetAllRows(string userName, string tableName) { … } // POST api/MyController/GetRowsOfType/userName/tableName/rowType [HttpPost] public List GetRowsOfType(string userName, string tableName, string rowType) { … } } 目前,我正在使用此路由到URL: routes.MapHttpRoute(“AllRows”, “api/{controller}/{action}/{userName}/{tableName}”, new { userName= UrlParameter.Optional, tableName = UrlParameter.Optional }); routes.MapHttpRoute(“RowsByType”, “api/{controller}/{action}/{userName}/{tableName}/{rowType}”, new { userName= UrlParameter.Optional, tableName […]

如何在Web API ASP NET 5中路由外部类库

我在ASP NET 5中创建了一个WEB API,我可以引用外部类库vNext。 我正在开发Visual Studio 2015社区。 在那个库里我有这个控制器: [Route(“api/[controller]”)] public class NovosController : Controller { // GET: api/values [HttpGet] public IEnumerable Get() { return new string[] { “i am”, “an external library” }; } 要在我的Web API引用中添加此库,我必须浏览DLL(一个用于dnxcore50,另一个用于dnx451)。 这是结果: dnx451 dnxcore50 在我的Web API中,我可以从该控制器获取数据,但我无法从URL访问它。 但是如果库在同一个解决方案中,我可以从URL访问它。 例如: 如果是外部库: 本地主机:51000 / API /诺沃斯 没有回报我 但如果库在同一解决方案中: 本地主机:51000 / API /诺沃斯 给我回报“我是一个外部图书馆” […]

web api路由和httppost

我正在使用WEB API 2构建API。 我有以下API控制器: [RoutePrefix(“api/account”)] public class AccountController : ApiController { [Route(“login”)] [HttpPost] public IHttpActionResult AuthenticateUser(string username, string password) { if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) { return BadRequest(“You must submit username and password”); } if (!Membership.ValidateUser(username, password)) { return BadRequest(“Incorrect username or password”); } FormsAuthentication.SetAuthCookie(username, true); return Ok(); } } 和jquery函数: $(document).ready(function () { $(“#login-form”).submit(function (e) […]

属性路由和CreatedAtRoute

我正在尝试将我的Web Api项目转换为使用属性路由。 我不理解的一件事是POST请求的CreatedAtRoute方法。 在我的WebApiConfig.cs中,我曾经有过 config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/account/{accountId}/site/{siteId}/visitor/{visitorId}/session/{sessionId}/{controller}/{action}”, defaults: new { action = RouteParameter.Optional } ); 我评论了这一点,认为不再需要它,但CreatedAtRoute想要路线的名称而无法找到它。 那么如何处理属性路由呢?

如何连接我的Web API Castle Windsor DI代码的各个部分?

如何连接我的Web API Castle Windsor DI代码的各个部分,以便Controller的路由选择正确的接口实现? 注意 :经过几次错误的开始/死角和部分胜利( 这里 , 这里和这里 ),我将尽快确定最多500分。 但是我只会给出一个非常好的答案 – IOW,一个足够清楚,我可以理解它并“插入”到我的项目中,这样我就可以将给定的具体类挂钩到特定的Controller。 这没什么:我有一个Web API(“MVC”)项目。 但实际上,这个服务器项目没有“V”(View),所以也许更好的首字母缩略词是MRC(Model / Repository / Controller)。 无论如何,我正在尝试使用Castle Windsor添加DI。 我试图通过构造函数接口args交换具体类的概念。 但是,如何实现此function, 我一直在摔跤是一头野兽,而且我现在非常伤痕累累,血腥的头发和泥泞的鼻孔引发。 我认为,无论如何,我需要的大部分代码 – 首先。 考虑到DI,我现在有一个“DIPlumbing”文件夹和一个“DIInstallers”文件夹。 “DIPlumbing”文件夹包含两个类:WindsorCompositionRoot.cs和WindsorControllerFactory.cs。 “DIInstallers”文件夹目前有三个文件,即ISomethingProvider.cs,SomethingProvider.cs和SomethingProviderInstaller.cs SomethingProviderInstaller似乎是将DIInstallers中的接口/类连接到DIPlumbing文件夹中的东西的关键。 (我还修改了Global.asax.cs以替换Castle Windsor替换的默认控制器路由业务)。 但我很困惑我应该在DIInstallers文件夹中放置哪些类。 这些应该取代我的存储库(它同样有一个接口和一个为每个模型实现该接口的具体类)? IOW,我应该将我的Repository代码基本上移到DIInstallers文件夹中 – 然后摆脱IRepository和Repository单元吗? 当然,这将导致在Controller类中进行必要的更改,这些更改现在引用了Repository类。 或者存储库和DIInstallers类是否共存? 如果是这样,控制器,安装程序和存储库之间的连接/关联是什么? 似乎我读到的DI和Castle Windsor越多,我就越困惑。 我不知道我是否过于密集,或者我是否想要使它变得更难,或者使用/呈现它的冲突风格是问题。 底线是:我被困在流沙中,需要Johnny Quest伸出一根坚固的竹竿。 最好的答案可能是,也许可能要求太多,将直观地表示所有这些组件 – 控制器,模型,存储库,安装程序,Global.asax.cs,组合根,工厂,提供商等。 ,彼此相关。 出于“完全公开”的目的,我将添加我希望是下面代码的关键元素,以显示我已经获得的内容以及它(希望如何)相互连接。 组成根: public […]

我可以在ASP.Net Web API控制器中使用多个Get方法

我想为Ex实现多个Get方法: 获取(int id,User userObj)和Get(int storeId,User userObj) 是否可以像这样实现,我不想更改操作方法名称,因为在这种情况下我需要在URL中键入操作名称。 我正在考虑通过这个样本格式’ // localhost:2342 / ‘来执行操作方法,该格式不包含操作方法名称。

WebApi 2.0路由与查询参数不匹配?

我刚刚从AttributeRouting切换到WebApi 2.0 AttributeRouting,并且有一个控制器和动作定义如下: public class InvitesController : ApiController { [Route(“~/api/invites/{email}”)] [HttpGet] [ResponseType(typeof(string))] public IHttpActionResult InviteByEmail(string email) { return this.Ok(string.Empty); } } 示例查询: GET: http://localhost/api/invites/test@foo.com 我收到的响应是200,内容为空(由于string.Empty)。 这一切都很好 – 但我想将电子邮件属性更改为查询参数。 所以我将控制器更新为: public class InvitesController : ApiController { [Route(“~/api/invites”)] [HttpGet] [ResponseType(typeof(string))] public IHttpActionResult InviteByEmail(string email) { return this.Ok(string.Empty); } } 但现在在查询端点时: GET: http://localhost/api/invites?email=test@foo.com 我收到的回复是404: { “message”: “No HTTP […]

基于查询字符串参数名称的路由

我正在尝试在我的MVC4 WebAPI项目中配置路由。 我希望能够根据他们的名字或类型搜索产品,如下所示: /api/products?name=WidgetX – 返回名为WidgetX /api/products?type=gadget所有产品/api/products?type=gadget – 返回gadget类型的所有产品 路由配置如下: config.Routes.MapHttpRoute( name: “Get by name”, routeTemplate: “api/products/{name}”, defaults: new { controller = “ProductSearchApi”, action = “GetProductsByName”, name = string.Empty } ); config.Routes.MapHttpRoute( name: “Get by type”, routeTemplate: “api/products/{type}”, defaults: new { controller = “ProductSearchApi”, action = “GetProductsByType”, type = string.Empty } ); 问题是查询字符串参数的名称似乎被忽略,因此第一个路径始终是使用的路径,无论查询字符串参数的名称如何。 如何修改我的路线以使其正确?

Web Api 2.2 OData V4function路由

我有一个使用OData v4的Web Api 2.2项目。 正常的EntitySet配置可以根据需要使用所有http谓词。 我遇到问题的地方是尝试公开自定义函数。 我开始尝试做一些与标准示例不同的事情,但我一直支持尝试使基本示例函数正常工作。 这是我的启动配置(直接来自MS示例): using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using System.Web.OData.Builder; using System.Web.OData.Extensions; namespace Test.Service { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // other entitysets that don’t have functions builder.EntitySet(“Products”); builder.Namespace = “ProductService”; builder.EntityType().Collection .Function(“MostExpensive”) .Returns(); config.MapODataServiceRoute( “odataroute” , “odata” , builder.GetEdmModel() ); […]

根据json值路由到不同的操作

我想根据特定json参数的值将请求路由到不同的操作。 例如,给定以下json数据: { type: “type1”, type1data: “type1value” } 和 { type: “type2”, type2data: “type2value” } 我希望能在我的ApiController上有两个不同的动作: void CreateType1(string type1data) { // … } void CreateType2(string type2data) { //… } 这样的事情怎么办? 更新: 如果可能的话,我想要相同的url。 像/objects/create类的东西。