我对 ASP.NET 中的路由非常陌生。
我正在制作原型的系统具有具有关联名称的字符串,例如:
很像一本字典。我想要的是在我的 API 中创建一个端点,可以像这样访问:
我目前已经有了这个
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¶m2=3 this does too
// -http://mysite/api/GetString/abc/def nope
// -http://mysite/api/GetString/some/arbitrary/name/separated/by/slashes?param1=2¶m2=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。显然我做错了什么,而且我所要求的很可能是不可能的。
https://asp.mvc-tutorial.com/routing/routing-templates/
解决方案是在令牌前面使用“*”字符,如下所示:
[Route("api/GetString/{*objectPath}")]
我没有得到前导斜杠,但这很好,我可以在搜索之前添加它。当然,经过3个小时的搜索,我在发布问题17分钟后找到了这个:-)
致以最诚挚的问候和HTH某人