如何使用 ASP.NET Core 属性路由获取端点名称后的完整路径

问题描述 投票:0回答:1

我对 ASP.NET 中的路由非常陌生。

我正在制作原型的系统具有具有关联名称的字符串,例如:

  • /dev/accounting/people =“人员字符串”
  • /test/it/documents =“一些 it 文档字符串”
  • /some/任意/name/separated/by/slashes =“其他一些字符串”

很像一本字典。我想要的是在我的 API 中创建一个端点,可以像这样访问:

  • http://mysite/api/GetString/dev/accounting/people
  • http://mysite/api/GetString/test/it/documents
  • http://mysite/api/GetString/some/atory/name/separated/by/slashes

我目前已经有了这个

        Dictionary<string, string> _stringDictionary = new Dictionary<string, string>()
        {
            { "/abc","this works" },
            { "/abc/def","this doesn't" },
            { "/abc/def/ghi","neither does this" },
            { "/some/arbitrary/name/separated/by/slashes","nor this"},
        };

        [Route("api/GetString/{objectPath}")]
        [HttpOptions]
        [HttpGet]
        public IActionResult GetString(string objectPath)
        {
            // -http://mysite/api/GetString/abc this works
            // -http://mysite/api/GetString/abc?param1=2&param2=3 this does too
            // -http://mysite/api/GetString/abc/def nope
            // -http://mysite/api/GetString/some/arbitrary/name/separated/by/slashes?param1=2&param2=3 nope
            // I want objectPath to be everything after 'getstring' in the URLs above EXCEPT the parameters

            string resultValue = "[[NOT FOUND]]";
            if(_stringDictionary.ContainsKey(objectPath))
                resultValue = _stringDictionary[objectPath];

            return new OkObjectResult(new 
            { 
                result = resultValue,
            });
        }

显然,这是一个路由问题。我已经能够在 GetString 方法中获取一两个参数来工作,但是当指定更多参数时,我得到 404。显然我做错了什么,而且我所要求的很可能是不可能的。

asp.net url-routing asp.net-mvc-routing
1个回答
0
投票

https://asp.mvc-tutorial.com/routing/routing-templates/

解决方案是在令牌前面使用“*”字符,如下所示:

[Route("api/GetString/{*objectPath}")]

我没有得到前导斜杠,但这很好,我可以在搜索之前添加它。当然,经过3个小时的搜索,我在发布问题17分钟后找到了这个:-)

致以最诚挚的问候和HTH某人

© www.soinside.com 2019 - 2024. All rights reserved.