是否可以基于其驻留的服务器来禁用API端点?

时间:2019-09-24 16:41:30

标签: c# asp.net-core-webapi

我有一个“ ClearAllData”控制器端点,该端点在调用时清除SQL数据库中的所有数据。客户端出于测试目的请求此功能,但我想在生产中禁用此功能。我将如何去做呢?我正在使用.NET Core 2.2和C#

2 个答案:

答案 0 :(得分:2)

您可以添加如下所示的资源过滤器:

public class DevelopmentOnlyAttribute : Attribute, IResourceFilter
{
    public void OnResourceExecuted(ResourceExecutedContext context)
    {
    }

    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        var env = context.HttpContext.RequestServices.GetRequiredService<IHostingEnvironment>();
        if (!env.IsDevelopment())
        {
            context.Result = new NotFoundResult();
        }
    }
}

然后,只需使用此属性装饰动作:

[DevelopmentOnly]
public IActionResult ClearAllData()

答案 1 :(得分:1)

您可以尝试使用CORS。在此端点上仅允许特定客户端。 首先将策略配置为接受特定来源:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowMyOrigin",
            builder => builder.WithOrigins("links to origins"));
    });
}

之后,您可以将策略应用于控制器方法:

[EnableCors(“ AllowMyOrigin”)]