我想知道我是不是
(a)从事良好的编码工作,
(b)无害地重复自己,或者
(c)增加效率低下的冗余
例如:
1)在Configure()中,我可以添加RewriteOptions().AddRedirectToHttps();
2)在ConfigureServices()中我可以添加
services.Configure<MvcOptions>(options =>
{ options.Filters.Add(new RequireHttpsAttribute()); });
另一个例子:
1)在Configure()中,我可以添加app.UseAuthentication();
2)在ConfigureServices()中,我可以将.RequireAuthenticatedUser()
添加到我的AddMvc()
电话。
在两个示例中似乎我只能通过一次调用就可以逃脱。我是否自由而且清楚只能打一个电话?如果是这样,哪一个更好保留?
我已经搜索了一下,我可以看到所有这些方法都在使用,但是我没有找到比较这些调用的相对优点的资源,更不用说表明使用它的好坏方法了他们在一起。
答案 0 :(得分:1)
举个例子:
1)在
Configure()
我可以添加RewriteOptions().AddRedirectToHttps()
;2)在
ConfigureServices()
我可以添加services.Configure<MvcOptions>(options => { options.Filters.Add(new RequireHttpsAttribute()); });
这两者基本上都是一样的 - 它们会将HTTP请求重定向到HTTPS。不同之处在于它们应用于哪些请求。
如果您使用重写器中间件,所有进入中间件的请求都将被重定向到HTTPS。
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles(); // Requests handled by this middleware won't be redirected to HTTPS
var options = new RewriteOptions()
.AddRedirectToHttps();
app.UseRewriter(options); // All requests that make it this far will be redirected from HTTP to HTTPS
app.UseMvc(); // Requests guaranteed to be HTTPS
}
在第二种情况下,您使用全局过滤器来应用RequireHttpsAttribute
,只有发送到MvcMiddleware
的请求才会被重定向到HTTPS。
就最佳实践而言,我建议使用重写器中间件 - 您可以将其添加到中间件管道的开头,然后所有请求都需要HTTPS,而不仅仅是进入MVC的请求中间件。
在你的第二个例子中,这两种方法实际上做了不同的事情:
app.UseAuthentication()
- 对请求进行身份验证,并通过以下方式设置与请求关联的User
反序列化存储在cookie中的用户主体RequireAuthenticatedUser()
- 要求用户在调用控制器上的操作方法之前已登录。如果用户尚未登录,则会将其重定向到登录页面。在这种情况下,您必须在app.UseAuthentication()
之前致电app.UseMvc()
,否则即使您已登录,也不会设置请求的User
,并且您将被重定向到登录页面。