c# - asp.net core 5 Request.Schema 无法识别正确的命名空间
问题描述
我使用以下代码为电子邮件身份验证生成一个链接(用户应单击该链接,如果该链接有效,则该帐户将被激活)。以下代码将在控制器中正常工作,但我重构了代码并将其移至 Service 类。Request.Schema无法识别正确的命名空间。我尝试了几种方法和软件包,但它不起作用。我该如何解决?
用途:
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
//using Microsoft.AspNetCore.Mvc;
using ProjectName.Core.DTOs.ClientDTOs;
using ProjectName.Core.Services.Interfaces;
using ProjectName.Core.Utilities;
using ProjectName.DataLayer.Context;
using ProjectName.DataLayer.Entities.PublicEntities;
using ProjectName.DataLayer.Entities.UserEntities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using System.Web.Mvc;
using System.Threading.Tasks;
我在微软上关注了这个文档,但仍然没有工作....
网址.Action
var address = Microsoft.AspNetCore.Mvc.IUrlHelper.Action(
"ConfirmEmail",
"Account",
new { username = newUser.UserName, token = emailConfirmationToken },
**Request.Scheme**);
解决方案
以下代码将在控制器中正常工作,但我重构了代码并将其移至 Service 类。
Request
这是ControllerBase
类中的属性,您的服务类必须从 ControllerBase 或 Controller 继承。
更改您的代码,如下所示:
public interface IGenerateUrl
{
string GetUrl();
}
public class GernateUrl : IGenerateUrl
{
private readonly IUrlHelper url;
public GernateUrl(IUrlHelper url)
{
this.url = url;
}
public string GetUrl()
{
string scheme = url.ActionContext.HttpContext.Request.Scheme;
var address = url.Action(
"ConfirmEmail",
"Account",
new { username = "user", token = "token" },
scheme);
return address;
}
}
请务必注册如下服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddScoped<IGenerateUrl, GernateUrl>();
services.AddScoped<IUrlHelper>(x =>
{
var actionContext = x.GetRequiredService<IActionContextAccessor>().ActionContext;
var factory = x.GetRequiredService<IUrlHelperFactory>();
return factory.GetUrlHelper(actionContext);
});
services.AddControllersWithViews();
}
推荐阅读
- javascript - 如何在 MongoDB 中为作为教师模式的一部分的时间表创建模式?
- html - 使用状态机验证表单域
- visual-studio - VS 2019 解决方案资源管理器引用旧 Nuget 包中的文件
- node.js - Bitbucket 管道无法安装 Angular cli?
- r - 如何删除数据框中 % 之后的所有内容并将已删除的数据合并到新的数据框中?
- python - 如何禁用样式表中的焦点指示
- reactjs - 在仅功能组件中设置 React Context
- c# - RSACng 不包含 ExportRSAPrivateKey 的定义
- elasticsearch - 获取日期字段的映射解析器错误
- reactjs - 使用反应钩子跨组件携带页面上下文/状态