Tag: attributerouting

使用MVC 5 RouteArea属性时,无法找到默认区域视图

我有一个有多个领域的MVC5项目。 我有一个默认区域(名为Default ),在其中有一个默认控制器(名为DefaultController )。 这可以在现场路线上访问。 [RouteArea] public class DefaultController : Controller { [Route] public ActionResult Index() { return View(“Index”); } } public static void RegisterRoutes(RouteCollection routes) { routes.LowercaseUrls = true; routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); routes.MapMvcAttributeRoutes(); routes.MapRoute( name: “Default”, url: “{controller}/{action}/{id}”, defaults: new { controller = “Default”, action = “Index”, id = UrlParameter.Optional }, namespaces: new[] { “MyProject.Areas.Default.Controllers” } […]

ASP MVC 5属性路由没有注册路由

概观 我正在尝试让属性路由与我的api控制器一起工作。 它似乎没有工作,我不确定为什么。 我不确定我是否错过了关键步骤,或者问题是什么。 问题 我正试图点击localhost / api / user / custom?test = 1但是我得到了404(我希望这可以工作) 如果我点击localhost / api / customapi?test = 1我成功进入我的方法 为什么第一个url不起作用? 建立 我的设置如下: CustomController.cs [System.Web.Mvc.RoutePrefix(“api”)] public class CustomApiController : ApiController { [System.Web.Mvc.Route(“user/custom”)] [System.Web.Http.HttpGet] public async Task Get([FromUri] CustomRequest request) { //Work } } WebApiConfig.cs public static class WebApiConfig { public static void Register(HttpConfiguration config) […]

使用AttributeRouting隐藏URL中的区域

我们使用Areas来对使用AttributeRouting在ASP.NET MVC3中编写的API进行版本化以定义我们的路由。 现在我们有一个“v1”区域,这是我们的第一个API版本。 当我们到达v2时,我们将复制v1并进行修改。 我想对网站使用相同的版本,我不希望路由中的/ v1。 我的问题是,我如何隐藏我的URL中的区域,以便我可以打电话 mywebsite.com/Users/1 代替 mywebsite.com/v1/Users/1 这是我在控制器中的内容 [RouteArea(“/”)] public class HomeController : Controller { // // GET: /v1/Home/ [GET(“”)] public ActionResult Index() { return View(); } } 这是我尝试访问mywebsite.com/时得到的 提前致谢!

使用属性路由时是否可以更改路由表中的路由顺序?

所以,我正在将区域从使用AreaRegistration切换到使用属性路由。 我遇到的问题似乎是由路由加载到路由表中的顺序引起的。 我通过最后加载有问题的路由解决了AreaRegistration中的问题,这样只有当所有其他路由不匹配时才会匹配该路由。 使用属性路由,这似乎不可能。 我在创建路由时有Order参数,但这不会影响路由表的方式,除非非常狭窄。 这是我在AreaRegistration文件中的路由: context.MapRoute( name: “ActionItems_home”, url: “ActionItems/{group}/{statuses}/{overdueOnly}”, defaults: new { controller = “Home”, action = “Index”, group = “All”, statuses = “New,Open”, overdueOnly = false }, namespaces: new string[] { “IssueTracker.Areas.ActionItems.Controllers” } ); 现在,当我尝试将其切换到属性路由时,唯一接近工作的是: [Route(“”, Order = 4)] [Route(“{group:regex(^(?!Item|DecisionLogs))?}”, Order = 3)] [Route(“{group:regex(^(?!Item|DecisionLogs))}/{statuses=New,Open?}”, Order = 2)] [Route(“{group:regex(^(?!Item|DecisionLogs))}/{statuses=New,Open}/{overdueOnly:bool=false?}”, Order = 1)] 请注意,我必须放入正则表达式,因为否则不会调用Item控制器 […]

使用AttributeRouting在WebAPI中指定默认控制器/操作路由

如何设置使用AttributeRouting而不是WebAPI使用的默认RouteConfiguration时使用的默认控制器。 即删除注释的代码部分,因为使用AttribteRouting时这是多余的 public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); //routes.MapRoute( // name: “Default”, // url: “{controller}/{action}/{id}”, // defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional } //); } } 如果我评论上面的部分并尝试运行webapi应用程序,我会收到以下错误,因为没有定义默认的Home控制器/操作。 HTTP错误403.14 – 禁止Web服务器配置为不列出此目录的内容。 如何通过归属控制器/操作的属性路由指定路由? 编辑:代码示例: public class HomeController : Controller { [GET(“”)] public ActionResult Index() { return […]

Web Api Controller在其他项目中,路由属性不起作用

我有两个项目的解决方案。 一个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“/ alert”时,我得到了404。 我在这里想念的是什么? 为什么我不能使用这个控制器? 组装肯定是加载所以我不认为http://www.strathweb.com/2012/06/using-controllers-from-an-external-assembly-in-asp-net-web-api/是答案这里。 有任何想法吗?

使用属性路由为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) { … } } 现在我想在我的视图中构建“/ reviews / edit”,我该怎么做? 我已经尝试创建一个小扩展方法,但它要求我给每个路由一个实际的“RouteName”。 有没有我可以使用的方法(比如在MVC中)我可以通过控制器和动作? @Url.Action(“Edit”, “Reviews) 我现在使用的方法(使用RouteName)也不允许我使用整数作为参数(除非我传递一个默认值)。 如果我确实需要命名我的所有路线,我如何创建路线url,但是在我的请求的“数据”部分中传递我的参数? 目前的方法: […]

获取“尝试使用WebAPI时未找到与名为’SampleSlashBaseService’的控制器匹配的类型”

我有一个webapi项目,其基础ApiController名为SlashBaseService: [RouteArea(“uBase”)] public abstract class SlashBaseService : ApiController { } 生成的dll用于WebForms项目中,因此我还有一个WebActivator类,其中包含以下代码来生成路由: RouteTable.Routes.MapHttpAttributeRoutes(config => { // Get all services inheriting from SlashBaseService foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { foreach (var type in assembly.GetTypes()) { if (type.IsSubclassOf(typeof(SlashBaseService))) { // Scan assembly config.ScanAssembly(assembly); // Skip the remaining types in this assembly break; } } } }); RouteTable.Routes.MapHttpRoute( name: […]

在URL中使用斜杠“/”路由参数

我知道你可以在路由属性中应用通配符来允许/例如日期输入,例如: [Route(“orders/{*orderdate}”)] 通配符的问题仅适用于URI中的最后一个参数。 如果要拥有以下URI,我该如何解决问题: [Route(“orders/{orderdate}/customers”)] 更新: 我知道通过重构代码来解决问题的选择很少,所以请不要提供类似的解决方案: 将路线模板更改为[Route(“orders/customers/{orderdate}”)] 将日期更改为其他格式(例如”dd-mm-yyyy” )

多个控制器类型具有相同的路由前缀ASP.NET Web Api

是否可以将GET和POST分离为单独的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) {…} }