Tag: asp.net core routing

将文本添加到URL而不是int ID

目前我们的固定链接不正确并阻碍搜索,例如https://example.com/en/blogs/19 – 这应该包含Google可以在搜索中找到的URL,而不是使用的int id从Db中检索。 假设我们能够编辑包含关键字的链接,那么我们可以说一篇关于“汽车行业最新动态”的文章会给算法带来更大的影响。 例如: https://example.com/en/blogs/news/The_Automotive_Industry_Latest : https://example.com/en/blogs/news/The_Automotive_Industry_Latest – 此链接应指向https://example.com/en/blogs/19 我可以通过使用以下内容来实现这一点 – 但这是实现这一目标的方法吗? [Route(“en/blogs”)] public class BlogController : Controller { [HttpGet(“{id}”)] [AllowAnonymous] public IActionResult GetId([FromRoute] int id) { var blog = _context.Blogs.Where(b => b.Id == id); return Json(blog); } [HttpGet(“{text}”)] [AllowAnonymous] public IActionResult GetText([FromRoute] string text) { var blog = _context.Blogs.Where(b => b.Title.Contains(text)); if(blog […]

AmbiguousActionException:匹配多个动作。 以下操作匹配路由数据并满足所有约束

我正在使用ASP.NET Core MVC创建一个网站。 当我点击某个动作时,我收到此错误: AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied: Web.Controllers.ChangeEventsController.Create (Web) Web.Controllers.ProductsController.CreateChangeEvent (Web) 这就是我在我的ProductsController的index.cshtmlm中定义我的动作的方法: Create Change Event 这是我的路线: app.UseMvc(routes => { routes.MapRoute( name: “default”, template: “{controller=Home}/{action=Index}/{id?}”); }); 以下是我定义操作的方式: // ChangeEventsController [HttpGet(“{id}”)] public IActionResult Create(Guid id) // ProductsController [HttpGet(“{id}”)] public IActionResult CreateChangeEvent(Guid id) 我做错了什么? 更新 感谢@MegaTron的回复,但是我想知道为什么我不能为不同的控制器提供相同的操作路径。 […]

路由不适用于自托管的Web API

这基本上就是我所拥有的,一个非常简单的三个文件集,带有新的asp.net核心2.1(实际上是从教程中复制粘贴): public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup(); } 然后是最简单的启动 class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseMvc(); […]

在MVC中路由6

我有一个超级简单的控制器,有两种方法: public IActionResult Users(long id) { return Json(new { name = “Example User” }); } public IActionResult Users() { return Json(new { list = new List() }); } 一个用于选择所有用户,另一个用于返回所有用户。 在web api 2中,我可以使用以下路由,一切正常: config.Routes.MapHttpRoute( name: “Users”, routeTemplate: “v1/Users”, defaults: new { action = “Users”, controller = “Users” }, constraints: null, handler: new TokenValidationHandler() { InnerHandler = […]

如何在asp.net核心中编写中间件作为自定义路由器?

我想转换这段代码: var trackPackageRouteHandler = new RouteHandler(context => { var routeValues = context.GetRouteData().Values; return context.Response.WriteAsync( $”Hello! Route values: {string.Join(“, “, routeValues)}”); }); var routeBuilder = new RouteBuilder(app, trackPackageRouteHandler); routeBuilder.MapRoute( “Track Package Route”, “package/{operation:regex(^track|create|detonate$)}/{id:int}”); routeBuilder.MapGet(“hello/{name}”, context => { var name = context.GetRouteValue(“name”); // This is the route handler when HTTP GET “hello/” matches // To match HTTP […]

ASP.NET Core Routing适用于VS IIS Express,但不适用于IIS 10

我正在开发ASP.NET Core Web API。 在这里我有一种情况,我必须使用多个get函数从SQL Server DB获取数据。 所以,为此,我正在做自定义属性路由。 以下是我的代码 [Route(“api/[controller]”)] public class MeController : Controller { private readonly ITechRepository _tech; private readonly IPageOptions _page; public MeController(ITechRepository tech,IPageOptions page) { _tech = tech; _page = page; } [Route(“getTech”)] public IEnumerable Get() { return _tech.getAll(); } [Route(“getOptions”)] public IEnumerable getOptions() { return _page.getOptions(); } //GET api/values/5 [HttpGet(“{id}”)] […]

HttpGet属性的路由名称asp.net core 2中基本通用控制器类的名称

我有一个通用控制器,它有几个派生的控制器类。 但我无法弄清楚如何处理HttpGet的路由名称,因为它需要不变。 [HttpGet(“{id}”, Name =”should not hard coded here for derived class”)] public virtual async Task Get(int id) 我需要路由名称,因为在我的HttpPost函数中我想返回需要HttpGet 路由名称的 CreatedAtRoute() 路径名称不能进行硬编码,因为所有派生类都需要具有不同的路由名称。 这是基本控制器 public abstract class BaseController : Controller where TEntity : BaseOptionType, new() where TContext : DbContext { private readonly IGenericRepository _repository; private readonly ILogger<BaseGenericOptionTypesController> _logger; public BaseController(IGenericRepository repository, ILogger<BaseController> logger) { _repository = […]

同一个应用程序ASP.NET Core 2.0中的不同域

我在Azure Web应用程序中托管了ASP.NET Core 2.0应用程序。 此应用已配置域domainA.com 。 我的应用程序中有一个路由,例如domainA.com/route 。 现在我想将其他域仅限于此路由,例如domainB.com 。 做这个的最好方式是什么?

ASP.Net Core Web API基于约定的路由?

我错过了什么,我为这个控制器打了404欢迎? 我真的不想使用基于属性的路由。 我也不希望action成为任何URI的一部分。 我正在使用Visual Studio 2017和.Net Core 1.1。 TestController.cs using System; using Microsoft.AspNetCore.Mvc; namespace Foo.Controllers { public class TestController : Controller { public long Get() => DateTimeOffset.Now.ToUnixTimeSeconds(); } } 请注意,这适用于[Route(“api/Test”)]属性。 但我不想使用基于属性的路由。 一旦我取消该属性,我就会得到404。 Startup.cs namespace Foo { public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile(“appsettings.json”, optional: false, reloadOnChange: true) […]