Pro*_*ofK 6 c# html.actionlink asp.net-core-mvc asp.net-core asp.net-core-routing
我有以下内容ActionLink:
@Html.ActionLink("Upload", "Upload", "File")
Run Code Online (Sandbox Code Playgroud)
但当我将鼠标悬停在链接上时,浏览器中显示的网址是http://localhost:44334/Upload.这个网址中的控制器在哪里?奇怪的是,点击网址会将我带到我的File/Upload视野,但更奇怪的是,浏览器地址栏中显示的网址是https://localhost:44334/Upload.
的ActionLink是页面上Home/Explorer,所以据我所知控制器名通常是必要的.
为什么ActionLink助手会遗漏控制器名称,为什么链接仍然有效?我尝试使用缓存清除刷新页面,没有区别.我不知道还有什么可以做,除了它可以工作,但我担心这是一些怪癖,当我部署我的网站时它将不再起作用.
我的路由在Startup类的Configure方法中仍然是标准的,开箱即用的:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我现在已经Download在HTML文件表的每一行添加了一个链接,如下所示:
@Html.ActionLink("Download", "Download", "File", new { filePath = file.Path })
Run Code Online (Sandbox Code Playgroud)
此链接也会在没有控制器名称的情况下呈现,例如:
https://localhost/Download?filePath=....
Run Code Online (Sandbox Code Playgroud)
Http{Verb}("{routeTemplae}")通常在构建REST API时使用.为了能够在使用属性路由时为默认MVC控制器生成URL,您将需要使用Route属性.
原始控制器可能没有路由前缀,这意味着
//POST /Upload //<-- when there is no prefix on the controller
[HttpPost("Upload")]
Run Code Online (Sandbox Code Playgroud)
在控制器上将路由到/Upload没有控制器前缀.
通过在控制器上包含路由的前缀,它将在使用属性路由时生成URL时包含控制器名称.
[Route("[controller]"]
public class FileController : Controller {
//POST File/Upload
[HttpPost]
[Route("Upload")]
public async Task<ActionResult> Upload(UploadFilesViewModel model, IEnumerable<IFormFile> files) {
//...
}
//GET File/Download
[HttpGet]
[Route("Download")]
public async Task<IActionResult> Download(string filePath) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
参考路由到控制器操作
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |