我在各种控制器上使用AuthorizeAttribute,可能需要根据请求本身的某些属性返回403或429(请求太多).我完全在一个自定义的OnAuthorization实现中实现它,然后在必要时抛出一个带有相应响应代码的新HttpResponseException.在我的机器上工作得很好......
在规模上(每分钟数千个请求),这个实现很糟糕,它崩溃了网站.将相同的逻辑移动到控制器操作本身并且仅返回适当的HttpResponseMessage就perf而言工作得非常好,因此在OnAuthorization中抛出异常的费用似乎是perf问题的根本原因.
我喜欢在我可以用来装饰多个控制器和动作的属性中实现它的想法,我强烈不喜欢将少量逻辑移动到控制器动作中,然后重复多次.是否可以从注释返回适当的HTTP状态而不抛出异常?即使它不是从AuthorizeAttribute继承,以这种方式装饰代码也会更好.
编辑:这是Web API 2,而不是MVC
我试图在.Net核心中使用预处理程序指令,但我无法确定获取指令的正确方法:
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
#if MAC
Console.WriteLine("MAC");
#else
Console.WriteLine("NOT MAC");
#endif
}
Run Code Online (Sandbox Code Playgroud)
我已尝试从命令行进行各种排列以使其工作,但我似乎错过了一些东西.以下是运行各种构建和运行命令时的shell输出:
~/dev/Temp/DirectiveTests $ dotnet msbuild /p:MAC=TRUE
Microsoft (R) Build Engine version 15.1.548.43366
Copyright (C) Microsoft Corporation. All rights reserved.
DirectiveTests -> /Users/me/dev/Temp/DirectiveTests/bin/Debug/netcoreapp1.1/DirectiveTests.dll
~/dev/Temp/DirectiveTests $ dotnet run /p:MAC=true
Hello World!
NOT MAC
~/dev/Temp/DirectiveTests $ dotnet run
Hello World!
NOT MAC
Run Code Online (Sandbox Code Playgroud)
我正在使用工具版本1.0.1 dotnet --version
有谁知道如何使用.net核心从命令行正确设置指令?