You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core如何无需为每个参数追加斜杠向视图传递多参数

更优实现方案

方案1:使用查询字符串传递参数(无需修改全局路由)

你完全不需要修改默认全局路由规则,默认的{controller=Home}/{action=Index}/{id?}路由已经可以满足需求:未在路由模板中定义的参数会自动从查询字符串中读取并绑定到Action的入参。
你只需要把全局路由恢复为默认配置:

app.UseEndpoints(endpoints =>
{
     endpoints.MapControllerRoute(
         name: "default",
         pattern: "{controller=Home}/{action=Index}/{id?}");
});

访问时按如下格式传参即可:
/Product/DettaglioDescrizione?id=123&descrizione=这里是商品描述

方案2:给指定Action加特性路由(不影响全局路由规则)

如果你希望参数还是用路径分隔的形式,又不想改全局路由影响其他接口,可以仅给需要的Action添加特性路由:
首先在全局路由配置中保留默认规则,然后在DettaglioDescrizione方法上添加路由属性:

[Route("Product/DettaglioDescrizione/{id}/{descrizione?}")]
public IActionResult DettaglioDescrizione(int id, string descrizione)
{
    ViewData["ProductId"] = id;
    ViewData["ProductDescription"] = descrizione;
    return View("Details");
}

这样只有这个Action会匹配/Product/DettaglioDescrizione/123/xxx格式的请求,其他接口还是走默认路由规则。

额外优化建议

你可以用强类型视图模型替代ViewData传递数据,避免拼写错误的同时获得编译时类型检查:

  1. 定义视图模型类:
public class ProductDetailViewModel
{
    public int Id { get; set; }
    public string Description { get; set; }
}
  1. 控制器中传递模型:
public IActionResult DettaglioDescrizione(int id, string descrizione)
{
    var model = new ProductDetailViewModel
    {
        Id = id,
        Description = descrizione
    };
    return View("Details", model);
}
  1. 视图中绑定模型:
@model ProductDetailViewModel
<div class="text-center">
    <h1 class="display-4">Prodotti</h1>
    <p>Id prodotto: @Model.Id</p>
    <p>Descrizione prodotto: @Model.Description</p>
</div>

内容的提问来源于stack exchange,提问作者Antonio Argentieri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:00:00