c# - @Url.Action 传递当前 url 的 id 段
问题描述
我正在 dotnet core 3.1 C# MVC 中开发应用程序。
我在 Startup.cs 文件中有这样的 URL 映射:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Account}/{action=Index}/{id?}");
});
有一个名为 Dashboard 的控制器和我有这样的 URL 的操作方法 Index。
<domain>/<controller>/<action>/<id>
http://localhost:57088/Dashboard/Index/03359edbae9543b5a1bc956e9282cfb6
在 Razor 页面中,每当我使用 @Url.Action 创建指向相同控制器和相同操作的链接时,它都会自动添加 URL 的 id 段。
@Url.Action("Index", "Dashboard");
然后它创建这样的 URL:
http://localhost:57088/Dashboard/Index/03359edbae9543b5a1bc956e9282cfb6
但是,当我使用 @Url.Action 将 URL 创建到不同的控制器时,它不会添加 URL 的 id 段。
@Url.Action("DoSomething", "Photos");
然后它创建这样的 URL:
http://localhost:57088/Photos/DoSomething
但我怎样才能创建这样的 URL:
http://localhost:57088/Photos/DoSomething/03359edbae9543b5a1bc956e9282cfb6
如何使用 @Url.Action 将相同的 id 段添加到不同的控制器?
解决方案
IUrlHelper.Action
有一个重载,它接受一个包含路由值的匿名对象。您需要调用此重载并传递必要的信息以正确识别您的操作。
例如,假设您的 Id 存储在Guid
您的模型上的一个字段中:
public class MyModel
{
public Guid Id { get; set; }
// other properties
}
调用Url.Action
可能如下所示:
@Url.Action("DoSomething", "Photos", new { id = Model.Id });
推荐阅读
- javascript - Gmail api - 浏览器快速入门错误:错误请求
- laravel - Laravel Passport 未使用 JWT cookie 进行身份验证(自用 API)
- javascript - aws s3 sdk 是否具有与 aws s3 cp 相同或等效的命令?
- laravel - Laravel 主键不允许为空
- excel - 用于对多列求和的最佳公式从搜索值返回 1 行
- python - 在 python 中使用 concat 运算符创建列表的复杂性
- python - 使用 Python 的 RabbitMQ:使用 executemany() 时分别确认和拒绝消息
- swift - 在 Apple Watch 的后台检测“屏幕截图”按下
- sql - 选择最大记录
- java - 将 Spring/Hibernate 应用程序连接到在 Docker 中运行的 Mysql