问题描述
在尝试从控制器外部生成url时,我无法到达Request.Scheme
。
在控制器中,我可以这样做以生成没有问题的网址:
//get UserManager bits
var callBackUrl = Url.CallBackExtensionLink(user.Id,token,Request.Scheme);
CallBackExtensionLink()
是我创建的IUrlHelper
扩展方法。
但是,Request.Scheme会引发空引用异常。
如何在控制器之外获取值?
解决方法
因此,在进行了更多调查之后,我能够通过将IUrlHelper
注入.net核心中的DI来缓解此问题,这与其他方法的完成方式不同。
将此添加到DI中:
services.AddSingleton<IActionContextAccessor,ActionContextAccessor>();
services.AddScoped<IUrlHelper>(x => {
var actionContext = x.GetRequiredService<IActionContextAccessor>().ActionContext;
var factory = x.GetRequiredService<IUrlHelperFactory>();
return factory.GetUrlHelper(actionContext);
});
然后将IUrlHelper传递到实现类的构造函数中。
private readonly IUrlHelper helper;
YourConstructor(IUrlHelper helper){
this.helper = helper;
}