多个路由分配给一个方法,如何确定哪个路由被调用?
我目前正在研究一个小型ASP.NET MVC项目.该项目是几个月前发布的.但是现在应出于可用性和SEO原因实施更改.我决定使用属性路由来创建干净的URL. 此刻调用产品页面: hostname.tld/controller/getArticle/1234 我定义了这样的新路线: [Route("Shop/Article/{id:int}/{title?}", Name = "GetArticle", Order = 0)] public ActionResult GetArticle(int id, string title = null) { // Logic } 一切正常,但是由于向后兼容和SEO原因,旧路线应该仍然可用.并将HTTP状态代码301重定向到新URL. 我听说可以将多个路线分配给一个动作,例如: [Route("Shop/Article/{id:int}/{title?}", Name = "GetArticle", Or
0 2024-04-14
编程技术问答社区
在视图中用属性路由为Web Api构建URL
我如何从Web API中获取URL? 示例(来自 msdn-blog ): [RoutePrefix("reviews")] public class ReviewsController : ApiController { // eg.: /reviews [Route] public IHttpActionResult Get() { ... } // eg.: /reviews/5 [Route("{reviewId}")] public IHttpActionResult Show(int reviewId) { ... } // eg.: /reviews/5/edit [Route("{reviewId}/edit")] public IHttpActionResult Edit(int reviewId) { ... } } 现在我想在我的视图中构造"/评论/编辑",我该怎么做? 我
0 2024-04-13
编程技术问答社区
多个控制器有相同的URL路由,但有不同的HTTP方法
我有一个以下两个控制器: [RoutePrefix("/some-resources") class CreationController : ApiController { [HttpPost, Route] public ... CreateResource(CreateData input) { // ... } } [RoutePrefix("/some-resources") class DisplayController : ApiController { [HttpGet, Route] public ... ListAllResources() { // ... } [HttpGet, Route("{publicKey:guid}"] public ... ShowSingleResource(Guid publicKey) {
ASP.NET Web API中带有可选参数的属性路由
我正在尝试使用Web API 2属性路由来设置自定义API.我的路线工作使我的功能被调用,但是由于某种原因,我需要传递第一个参数才能使一切正常工作.以下是我要支持的URL: http://mysite/api/servicename/parameter1 http://mysite/api/servicename/parameter1?parameter2=value2 http://mysite/api/servicename/parameter1?parameter2=value2¶meter3=value3 http://mysite/api/servicename/parameter1?parameter2=value2¶meter3=value3&p4=v4 最后3个URL可以使用,但第一个说明"在与请求相匹配的控制器"控制器名称"上找不到动作." 我的控制器看起来像这样: public class MyServiceController
0 2024-04-13
编程技术问答社区
RoutePrefix vs Route
我知道RoutePrefix不会单独向路由表添加路由.关于您的操作,您需要声明Route属性.我很难找到权威博客/MSDN页面/某些内容,这些内容指出了为什么Defalut RoutePrefix没有在路由表中添加路由. 是否有人有一个权威的帖子,确实包含这种情况,如果是这样,您会让我知道它是谁.非常感谢. 编辑 为了澄清我的问题 不起作用 [RoutePrefix("api/Steve")] public class SteveController : ApiController { public int get(){return 1000000;} } 作品 [RoutePrefix("api/Steve")] public class SteveController : ApiController { [Route("")] public int get(){return 1000000;} } 上面的方案之所以有效,是
CreatedAtRoute路由到不同的控制器
我正在使用属性路由创建一个新的WebAPI来创建嵌套路由: // PUT: api/Channels/5/Messages [ResponseType(typeof(void))] [Route("api/channels/{id}/messages")] public async Task PostChannelMessage(int id, Message message) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (id != message.ChannelId) { return BadRequest(); } db.Messages.Add(mes
0 2024-04-12
编程技术问答社区
MVC属性路由不工作
我在MVC框架中相对较新,但是我确实有一个使用API​​控制器功能的Web项目,该项目利用了attributerOuting(Nuget package) - 但是,我启动了另一个项目,它只是不想跟随路线我放了. 控制器: public class BlazrController : ApiController { private readonly BlazrDBContext dbContext = null; private readonly IAuthProvider authProvider = null; public const String HEADER_APIKEY = "apikey"; public const String HEADER_USERNAME = "username"; private Boolean CheckSession() { IEnumerable
0 2024-04-11
编程技术问答社区
具有相同路由前缀的多个控制器类型 ASP.NET Web Api
是否可以将获取并将其发布到单独的API控制器类型中,并使用相同的路由前缀访问它们? 这是我的控制器: [RoutePrefix("api/Books")] public class BooksWriteController : EventStoreApiController { [Route("")] public void Post([FromBody] CommandWrapper commandWrapper){...} } [RoutePrefix("api/Books")] public class BooksReadController : MongoDbApiController { [Route("")] public Book[] Get() {...} [Route("{id:int}")] public Book Get(int id) {...} } 解决方案 Web API(1.x-2.x)不
0 2024-04-11
编程技术问答社区
URL中带有斜线"/"的路线参数
我知道您可以在路由属性中应用通配符以允许/例如: [Route("orders/{*orderdate}")] 通配符的问题仅适用于URI中的最后一个参数.如果要拥有以下URI: ,我该如何解决问题 [Route("orders/{orderdate}/customers")] 更新: 我知道通过重构代码来解决问题的选择很少,因此请不要提供解决方案: 将路由模板更改为[Route("orders/customers/{orderdate}")] 将日期更改为其他格式(例如"dd-mm-yyyy") 解决方案 @bet .. 我认为genericUriParserOptions不再适用于.NET 4.5或更高版本. 另外,按照 @jotabe 的建议,您可能需要正确解码URL请求.在大多数情况下,%2F将自动转化为斜线'/'.因此,如果您需要逃脱它,则首先需要解码'%' char ..所以您的URL:看起来像:www.domain.com/ap
0 2024-04-11
编程技术问答社区
使用属性路由时,查询字符串不起作用
我正在使用System.Web.Http.RouteAttribute和System.Web.Http.RoutePrefixAttribute启用我的Web API 2应用程序的清洁程序URL.对于我的大多数请求,我可以使用路由(例如Controller/param1/param2),也可以使用查询字符串(例如Controller?param1=bob¶m2=mary). 不幸的是,有了我的一个控制器(只有一个),这失败了.这是我的控制器: [RoutePrefix("1/Names")] public class NamesController : ApiController { [HttpGet] [Route("{name}/{sport}/{drink}")] public List Get(string name, string sport, string drink) { // Code rem
在Azure Functions中是否可以进行属性路由?
我试图强制执行一个路由参数为guid,但要低于错误 "执行函数时异常:getuser->一个或多个错误 发生. - >异常绑定参数'req' - >从 'System.String'到" System.Guid"." public static async Task Run( [HttpTrigger(AuthorizationLevel.Admin, "get", Route = "GetUser/{userId:guid}")] HttpRequestMessage req, Guid userId, ILogger log) { } 我提出的请求是http://localhost:7071/api/GetUser/246fb962-604d-4699-9443-fa3fa840e9eb/ 我错过了一些东西吗?我们不能执行路由参数为GUID?
0 2024-03-25
编程技术问答社区
WebAPI 2的RoutePrefix订单替代方案
在WebAPI中,您可以指定Order in RouteAttribute以确定匹配的路由的顺序. P> [HttpGet, Route("{name}", Order = 1)] public string GetByName(string name) { ... } [HttpGet, Route("other")] public string GetOther() { ... } 我将如何做同样的事情,但是使用RoutePrefix(没有Order属性)?如果这样做,它看起来像这样: [RoutePrefix("foo", Order = 1)] public class FooController : ApiController { ... } [RoutePrefix("foo/bar")] public class FooBarController : ApiController { ... } 执行上述(无想Order属性)在调用/foo/bar时会抛出
4 2024-03-16
编程技术问答社区
其他项目中的Web Api控制器,路由属性不工作
我有一个有两个项目的解决方案.一个Web API Bootstap项目,另一个是类库. 类库包含带有属性路由的apicontroller. 我将Web API项目的参考添加到类库中,并期望这只是工作. 配置了Web API中的路由: config.MapHttpAttributeRoutes(); 控制器很简单,看起来像: public class AlertApiController:ApiController { [Route("alert")] [HttpGet] public HttpResponseMessage GetAlert() { return Request.CreateResponse(HttpStatusCode.OK, "alert"); } } 但是,我进入URL"/nerver"时会得到404. 我在这里想念什么?为什么我不能使用此控制器?大会肯定
ASP.NET Web API多个RoutePrefix
opensource 属性路由允许具有多个Route-Prefixes. 为什么ASP.NET Web API 2.0不允许拥有多个RoutePrefix(). [RoutePrefix("api/v1/{abc}/Entity")] [RoutePrefix("api/v1/{abc}/{xyz?}/Entity")] public class MyApiController : ApiController { [Route("")] public IHttpResult Get() { return Ok("Hello World"); } } 解决方案 您可以在操作方法中添加路由,还可以用"〜" 覆盖RoutePrefix 示例: [RoutePrefix("api/v1/{abc}/Entity")] public class MyApiController : ApiController { [Route("")]
2 2024-03-16
编程技术问答社区
属性与传统的路由
Q1:所以这个文章说属性路由比常规路由对API版本更有利.我不清楚这种主张背后的原因,因为对我而言,为了支持这些主张: /api/v1/products /api/v2/products 您需要做的就是定义两条路线: routes.MapHttpRoute("V1", "api/v1/products", new {controller = "V1Controller", action = "ListProducts"}); routes.MapHttpRoute("V2", "api/v2/products", new {controller = "V2Controller", action = "ListProducts"}); 可以分享一些见解吗? Q2:本文说,与常规路由是一个问题表中条目的顺序以及您可以意外地将请求映射到错误的控制器.为什么这不是属性路由的问题?我的意思是该模板只是一个字符串,因此如何阻止我定义两个路线,其中一个路线比另一个
没有控制器后缀的控制器
根据我的设计要求,我想从控制器中排除后缀"控制器",然后用"资源"替换.因此," FundsController"将成为" FundsResource". 问题是,当我更改替换术语"控制器"时,我无法通过基于约定的路由或属性路由路由我的指定操作,并遇到一个错误,说找不到此名称的控制器. 我如何满足上述设计要求,并且能够毫无问题地路线?在基于约定还是属性路由中?或者,是否可以合并基于公约的好处和属性路由以实现这一目标? 预先感谢. 解决方案 "控制器"已对框架进行了硬编码,但是您可以创建一个新的控制器类型的解析器.这是菲利普(Filip)的一篇很棒的文章 - http://www.strathweb.com/2013/02/but-i-dont-want-want-to-call-web-api-controllers-controller/.
单个路由上的多个GET动词具有不同的参数名称 Web Api
如何使用单一路线根据参数名称调用不同的不同操作. 我需要遵循 /api/v1/user GET key=dfddg&secret=fafassaf&query=select id from user where user like '%ggg%' 和 /api/v1/user GET key=dfddg&secret=fafassaf&ids=fadfdafdsf,faffasfasfsf,asfasfasfasfas,asfasfasfasf 我写了以下代码 [RoutePrefix("api/v1/user")] public class UserController : ApiController { [GET("")] public String GetAllUsers(String key, String secret, String query) { return "GetAllUsers"; }
4 2024-03-16
编程技术问答社区
在WebAPI控制器中部分匹配路由
是否有任何方法可以使用WebAPI匹配URL的第一部分(专门属性路由).类似于匹配多个可选路径组件的方法,该组件事先未知. 例如:[Route("v{ver}/search/{remainingPath})]匹配路径v1/search/products或v2/search/customers/1234. 我想利用WebAPI的出色路线匹配框架,但是search之后的路径组件将不是控制器/操作匹配过程的一部分. 解决方案 将您的路由模板更改为[Route("v{ver}/search/{*remainingPath})]?...这里*将允许将search段之后的任何段匹配到您的路线... 其他解决方案 您应该能够覆盖路由处理程序以拦截请求并进行自定义路由.我从来没有做过,但是看起来您可以实现httpcontrollerdispatcher并覆盖sendasync方法以更改请求. public class CustomRouteHandler : HttpC
2 2024-03-16
编程技术问答社区
ASP.net WebApi 发现多个控制器类型与URL匹配。
我使用属性路由添加了一个新的HTTPPOST路由" API/EXTORT/ERROR/" 发现与URL匹配的多种控制器类型.如果多个控制器上的属性路由匹配所请求的URL. > ,但我在不同的控制器中没有相同的路线;这是这两个控制器中的唯一路由: exporterrorcontroller.cs [HttpGet] [Route( "api/export/error/total/" )] [HttpGet] [Route( "api/export/error/channel/{channelId}/" )] [HttpPost] [Route( "api/export/error/" )] [HttpDelete] [Route( "api/export/error/{id}/" )] [HttpPut] [Route( "api/export/error/clear/" )] ExportGeneratorController.cs
2 2024-03-16
编程技术问答社区
路线参数和多种控制器类型
我有一个ASP.NET Web API,使用用于控制器上的属性.动作级别没有路由属性.访问资源的路线是: [Route("{id}"] public MyApiController: ApiController { public HttpResponseMessage Get(Guid id) { // ... } } 我的问题是,当我想创建一个搜索控制器时,我希望URL为 [Route("search")] ,但这会导致错误:Multiple controller types were found that match the URL.是否可以确保在通用途径之前选择确切的匹配路线? 从技术上讲,短语search可能是第一个控制器的有效ID,但是由于{id}是GUID,因此永远不会是这种情况,因此我想选择具有确切匹配路线的控制器. 解决方案 您可以使用路由约束来完成工作.例如,您可以限制ID路线以仅接受有效的GU
4 2024-03-16
编程技术问答社区