我有一個運行在localhost:5001上的api,在我的ASP.NET MVC應用程式中,我能夠這樣做:
routes.MapRoute(
名稱。"Default"。
網址。"{*stuff}"。
默認值。new { controller = "Default", action = "DefaultAction" }.
);
這意味著我可以簡單地在我的瀏覽器中輸入localhost:5001/aRandomStuff,"aRandomStuff"將作為引數傳入我的DefaultController中的actionresult。
在.net5中做這種路由的等價物是什么?
app.UseEndpoints(endpoints => //span>
{
//routing here
});
?
uj5u.com熱心網友回復:
你可以直接在你的端點上使用RouteAttribute。
只要在你的Startup.cs中映射你的默認控制器(如果你需要有一個默認控制器):
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}")。)
});
然后在你的控制器中,在你想要的動作上添加Route屬性:
[Route("{id}")]
public IActionResult DefaultAction(string id)
{
return View()。
}
因為在這種情況下只有端點定義了引數{}路由,而控制器沒有,所以上述端點將從localhost:5001/whateverString觸發,whateverString將作為引數id的值被送入。
我需要編輯我的原始答案,因為它是針對 Api Endpoints 的。編輯后的答案應該適用于你的MVC應用程式。
uj5u.com熱心網友回復:
他們在.Net 5中對路由做了許多更新,這確實擾亂了我們對全面路由的看法。這些實際上是有意為之的,而且從技術上講,他們希望它是如何作業的。然而,從我們大多數人的角度來看,它帶來了很多混亂。您可以查看一些討論和錯誤日志這里,這里,和這里。
我未能讓它在啟動時與UseEndpoints一起作業。正如第一個鏈接所顯示的,控制器的優先級順序也在搗亂,這里的其他答案有可能導致路由沖突或其他混淆,即哪條路由最重要。
我所見過的唯一作業方式是在控制器中使用路由屬性,我們在其中設定順序。這意味著你知道它將是最后檢查的模式:
[Route("{*url}"/span>, Order = 999)]
public IActionResult MyCatchAll(string url) /span>
{
...
}
這樣一來,優先級順序將是最后的(我想大多數是在0-5之間,所以999已經很高了),而url作為一個引數傳遞給你,你可以根據需要進行管理。坦率地說,我更喜歡這種方式,但可以選擇做任何一種方式都是好的。
如果有人有辦法在 app.UseEndpoints 中做到這一點,我很樂意看到,但是所有的示例都失敗了,或者對我來說只是零星地作業。
uj5u.com熱心網友回復:
在你的動作上使用這個模式,并捕捉所有的請求,像這樣獲得第一個路由值
[]
public IActionResult Index()
{
string randomQuery =HttpContext.Request.RouteValues["catchAll"]? .ToString()。
return Content(randomQuery)。
}
uj5u.com熱心網友回復:
在下面的代碼中,DefaultAction()方法使用Route屬性與正則運算式。所有具有以下格式的URLlocalhost:port/SomeStringStuff將被這個動作方法處理。
[ApiController]
[Route("[控制器]")]
public class DefaultController : ControllerBase
{
[HttpGet] 。
[Route(@"/{text:regex(.*Stuff$)}")/span>]
public string DefaultAction(string text)。
{
//你的代碼...
return text。
}
}
考慮到ASP.NET Core框架將RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.CultureInvariant添加到正則運算式構造器中。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers()。
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/311755.html
標籤:
