【问题标题】:How to specify custom URL parameter names?如何指定自定义 URL 参数名称?
【发布时间】:2020-02-20 03:24:56
【问题描述】:

在 ASP.NET 路由中,我可以使用 FromUri 属性来指示应从请求的 URL 参数中获取参数。在复杂对象的情况下,ASP.NET 将方便地从参数中获取各个属性的值:

public class MyData
{
    public int Value1 { get; set; }

    public int Value2 { get; set; }
}

[HttpGet]
[Route("getvalue")]
public string getValue([FromUri] MyData args)
{
    // ...
}

现在,我们的样式指南要求 Web API 参数为驼峰式,而 C# 对象属性应为 PascalCased。

我如何告诉 ASP.NET 对 Web API 参数使用自定义名称(上例中为 "value1""value2")而不是属性名称?

编辑:明确地说,生成的 URL 格式是固定的:我的路由必须服务于类似的请求

.../getvalue?value1=15&value2=43

有了上面的代码,我就快到了,但是请求还是要的

.../getvalue?Value1=15&Value2=43

因此,我的问题是如何将value1value2 指定为URL 参数名称,而不是分别指定Value1Value2而不 更改C# 属性的名称。

【问题讨论】:

    标签: asp.net .net url


    【解决方案1】:

    我会这样做。

    [HttpGet("dosomething/{value1}/{value2}")]
    public void DoSomething(int value1, int value2)
    {
        // ...
    }
    

    可以对查询参数进行一些处理,但我认为您不能在 URL 本身中进行对象映射。

    如果您的目标是 RESTful API,您应该考虑 value1 和 value2 如何相互关联,并相应地对 URL 进行排序(例如,按照我的示例的顺序,“获取” url:“dosomething/value1”,它应该返回比“dosomething/value1/value2”更少的具体数据)

    【讨论】:

    • 抱歉,它不应该是动态路由。生成的 URL 的结构必须类似于 .../dosomething?value1=5&value2=10(当然,参数的顺序是可交换的)。
    • 您应该取回数据吗? “DoSomething”听起来可能是 POST/PUT 命令的合适候选者。
    • 是的,实际方法检索一些信息。为了简单起见,我省略了返回值,对不起。
    • 好的,我想我知道你在问什么。我从来没有亲自这样做过,但这看起来像你想要的:stackoverflow.com/questions/38332310/…
    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    相关资源
    最近更新 更多