首页 > 解决方案 > 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**);

标签: c#asp.net.netasp.net-mvcasp.net-core

解决方案


以下代码将在控制器中正常工作,但我重构了代码并将其移至 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();        
}

推荐阅读