[英]C# WebApi - Asp Net Core 2 - How can I put the csproj name into the route programmatically?
编辑:明确地说,我实际上不在乎它是否是csproj。 我只想能够为所有路由全局定义一个根名称。
一般来说,我是dotnet core 2和c#的新手。 我正在构建一个Webapi模板供团队其他成员使用,但是我希望能够将csproj名称作为路由的一部分,这样人们不必在每个控制器中都进行更改。
因此,例如:
WebStoreAbc.csproj
--------
[Route("api/v1/#CSPROJNAME#/products")]
public class ProductsController : Controller
{
... controller logic ...
}
Registers at runtime as:
/api/v1/WebStoreAbc/products
这样,每次从模板创建新项目时,我都不必为一堆控制器配置路由。
编辑2:我在下面使用了Mahmoud Heretani的答案并对其进行了调整。
string projectName = "template";
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/v1/" + projectName.ToLower() + "/{controller=Home}/{action=Index}/{id?}");
});
}
它认为您不能在[Route]属性内插入变量,因为它需要一个恒定值,但是Configure方法内的一个简单技巧可以解决这个问题:
var projectName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/v1/" + projectName + "/{controller=Home}/{action=Index}/{id?}");
});
但是对于您而言,我建议您创建一个程序集(类库),该程序集包含一个使用程序集名称配置路由的方法(就像前面的示例一样),然后在您的项目中使用此方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.