![](/img/trans.png)
[英]how do i set asp.net mvc attribute routing for the index without leading to ambiguity?
[英]How do I set up RESTful attribute routing in ASP.Net Core API if using Namespace version routing
我正在构建一个ASP.Net Core 1.1.0 Web API。
作为支持性的评论,我选择使用Peter Lazzarino的versionrouting NuGet软件包,以允许我根据版本将控制器分为不同的命名空间(和文件夹)。 我按照Peter的建议在Startup.cs中对其进行了配置,并且生成时没有错误。 我在用
var apiPrefix = "api";
根据Peter的建议,在Startup.cs中使用,以允许我所有的路由都以api开头。
我想遵循RESTful准则,并为我的方法使用HTTP动词属性。
我希望我的客户能够访问http://companyname.com/api/v1/mycontroller/status ,由于我的API项目中的文件夹“ Controllers \\ v1 \\ MyController.cs”中包含MyController,因此版本路由库应该能够找到它。
在我的控制器中,我有以下内容:
namespace MyProject.Controllers.v1
{
public class MyController : Controller
{
// GET: ~/api/v1/mycontroller/status
[HttpGet("/status")]
public JsonResult Status()
{
return Json(new { status = "API is running" });
}
}
}
但是,导航到http://companyname.com/api/v1/mycontroller/status给我一个404错误。
我曾尝试在SO帖子中将此问题作为注释留待评论, 如何在ASP.NET Core Web Api中完成版本控制 ,但是我在StackOverflow中的信誉尚不足以发表评论。 :(
因此,希望这里有人可以帮助我。
在此先感谢您提供的任何帮助。
您可以按照asp.net核心文档中指定的方式在控制器上使用Routes Attributes,这样就可以对api进行版本控制,但是随后您必须将其添加到每个控制器中,以使代码保持同步,我不知道确切的位置您可以将其全局添加。 希望这可以帮助
您可以简单地用以下方法装饰控制器:
[Route("api/v1/[controller]/[action]")]
public class MyController : Controller
{
// GET: ~/api/v1/mycontroller/status
[HttpGet]
public JsonResult Status()
{
return Json(new { status = "API is running" });
}
}
那么您的路线将是:
http://companyname.com/api/v1/mycontroller/status
解决问题的方法要求我不要为该类使用任何Route属性(因为命名空间版本化的NuGet代码实质上是为api / v1 / mycontroller构建MapRoute),并且也不要在HttpGet action属性前面使用正斜杠。属性(即[HttpGet(“ Status”)]而不是[HttpGet(“ / Status”)])。 一旦做出更改,它就会按预期开始工作。
当时不支持此特定功能, API版本控制现在支持使用API版本约定即时实现此特定设置。
您只需要配置您的应用程序并在模板中应用路由约束。
services.AddApiVersioning(options =>
options.Conventions.Add( new VersionByNamespaceConvention() );
现在,您的服务仅需定义为:
[ApiVersion("1.0")]
[ApiController]
[Route("api/v{version:apiVersion}/[controller]/[action]")]
public class MyController : ControllerBase
{
// GET: ~/api/v1/my/status
[HttpGet]
public IActionResult Status()
{
return Ok(new { status = "API is running" });
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.