Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取操作的绝对URL(不在视图中)-NullReferenceException_C#_.net_Asp.net Mvc_Url Routing - Fatal编程技术网

C# 获取操作的绝对URL(不在视图中)-NullReferenceException

C# 获取操作的绝对URL(不在视图中)-NullReferenceException,c#,.net,asp.net-mvc,url-routing,C#,.net,Asp.net Mvc,Url Routing,我已经搜索了很多这个问题,它们似乎都有相同的答案,似乎是由视图而不是控制器调用的 我已经尝试实现了答案,但是在这一部分我得到了一个NullReferenceExceptionurl.RequestContext.HttpContext.Request.url.Scheme 我参考了System.Web.Mvc但我仍然无法调用Url.Action。相反,我必须创建一个新的UrlHelper对象,然后调用Action方法。我不确定这是否是我的问题的原因 我的代码如下: public stat

我已经搜索了很多这个问题,它们似乎都有相同的答案,似乎是由视图而不是控制器调用的

我已经尝试实现了答案,但是在这一部分我得到了一个
NullReferenceException
url.RequestContext.HttpContext.Request.url.Scheme

我参考了
System.Web.Mvc但我仍然无法调用
Url.Action
。相反,我必须创建一个新的
UrlHelper
对象,然后调用
Action
方法。我不确定这是否是我的问题的原因

我的代码如下:

    public static class EmailHelper
            {

             public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, object routeValues = null)
                {
                    // Throws NullReferenceException
                    string scheme = url.RequestContext.HttpContext.Request.Url.Scheme;

                    return url.Action(actionName, controllerName, routeValues, scheme);
                }

             public static async Task SendReset(string emailAddress)
                {
                    MailDefinition md = new MailDefinition()
                    {
                        IsBodyHtml = true,
                        Subject = "Password Reset",
                        BodyFileName = "~/Templates/ResetConfirm.html",
                    };


                    UrlHelper helper = new UrlHelper();
                    string url = helper.AbsoluteAction("Login", "Account");

                    ListDictionary replacements = new ListDictionary();
                    replacements.Add("{{LoginUrl}}", url);

                    MailMessage msg = md.CreateMailMessage(emailAddress, replacements, new System.Web.UI.Control());
                    SmtpClient client = new SmtpClient();

                    await client.SendMailAsync(msg);
                }
            }
编辑

我正在从
AccountController
ResetPassword
post操作调用
SendReset

    public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)
    {
        // some code here...


       var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);
       if (result.Succeeded)
            {
                // Email confirmation of password reset
                await EmailHelper.SendReset(model.Email);

                return RedirectToAction("ResetPasswordConfirmation", "Account");
            }
公共异步任务ResetPassword(ResetPasswordViewModel模型)
{
//这里有一些代码。。。
var result=await UserManager.ResetPasswordAsync(user.Id、model.Code、model.Password);
if(result.successed)
{
//密码重置的电子邮件确认
等待EmailHelper.SendReset(model.Email);
返回重定向操作(“重置密码确认”、“帐户”);
}

控制器中也可以访问
UrlHelper
属性
Url
,因此请将该实例提供给您的方法以访问
UrlHelper

public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)
{
    // some code here...
    await EmailHelper.SendReset(Url, model.Email);
    //...
}


public static class EmailHelper
{
    public static async Task SendReset(UrlHelper urlHelper, string emailAddress)
    {
        //...
        string url = urlHelper.AbsoluteAction("Login", "Account");
    }
}
公共异步任务ResetPassword(ResetPasswordViewModel模型)
{
//这里有一些代码。。。
等待EmailHelper.SendReset(Url,model.Email);
//...
}
公共静态类EmailHelper
{
公共静态异步任务SendReset(UrlHelper UrlHelper,字符串emailAddress)
{
//...
字符串url=urlHelper.AbsoluteAction(“登录”、“帐户”);
}
}

你不能仅仅新建一个
UrlHelper
并期望它以与视图中相同的方式工作。正如你所说,你会在
HttpContext
之类的东西上得到空引用-在静态参考框架中,
HttpContext
的值是多少?没有,只有在请求/响应周期结束时,
HttpContext
才存在正在发生。如果您想调用
SendReset
,您应该从MVC框架初始化的控制器的视图或实例中提供
UrlHelper
。您是否应该从中调用
SendReset
代码?我们可以帮助您找到更好的方法来获取
UrlHelper
对象以提供判定元件it@DLeh我编辑了我的帖子,以包含调用
SendReset
的代码。我是否必须在
SendReset
中将登录页面的URL作为参数传递?这似乎是不必要的,因为参数总是相同的