Asp.Net Core 2.2生成passwordResetLink返回null问题求助
问题根因
你使用了AddDefaultUI(UIFramework.Bootstrap4)注入Identity内置页面,这套内置页面是基于Razor Pages实现的,没有对应的MVC控制器和ResetPassword Action,调用Url.Action匹配MVC路由自然会返回null。
解决方案
根据你的使用场景二选一即可:
方案1:使用默认Identity的重置密码页面
把Url.Action替换为适配Razor Pages的Url.Page,代码修改如下:
var passwordResetLink = Url.Page( "/Account/ResetPassword", "Identity", new { email = model.Email, token = token }, Request.Scheme);
方案2:使用自定义的Account控制器ResetPassword Action
如果你自己已经实现了Account控制器下的ResetPassword Action,需要做两项检查:
- 确保ResetPassword Action添加了
[HttpGet]注解,路由没有额外约束,方法可匿名访问 - 检查
Startup.cs的Configure方法中是否配置了默认MVC路由,配置示例如下:
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
如果已经配置路由仍然返回null,可以用直接拼接路由的兜底方案:
var passwordResetLink = $"{Request.Scheme}://{Request.Host}/Account/ResetPassword?email={Uri.EscapeDataString(model.Email)}&token={Uri.EscapeDataString(token)}";
注意:直接拼接需要对参数做Uri编码,避免特殊字符导致链接无效
内容的提问来源于stack exchange,提问作者user14344635
相关产品推荐
相关产品推荐

