首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >callbackUrl改变?%3f

callbackUrl改变?%3f
EN

Stack Overflow用户
提问于 2016-04-29 10:32:38
回答 2查看 1.1K关注 0票数 1

我目前正在做一个项目,遇到了一个奇怪的问题,我生成了一个callbackUrl,它可以进入确认电子邮件,以激活注册帐户:

代码语言:javascript
复制
var callbackUrl = Url.Action("registerconfirmation", "account", new { Id = "?" + confirmationToken }, protocol: Request.Url.Scheme);

问题在于它生成了这个url:

http://localhost:8159/account/registerconfirmation/%3fv9egt7cjoEGQvHfauiYE1A

正如你所看到的,它似乎取代了?对于%3f,我希望这与html编码有关。我试过追加?但这给了我一个好结果。

我目前正在使用ActionMailer包,以尽量减少控制器中的代码,当收到电子邮件时,它似乎无法正确地解码callbackUrl,而当我将电子邮件逻辑直接放在注册表HttpPost中时,它会很好地解码。

EmailController:

代码语言:javascript
复制
    public class EmailController : MailerBase
    {
                public EmailResult ConfirmationEmail(Register model, string callbackUrl)
                {
                    From = "donotreply@kevindefrene.me";
                    To.Add(model.Email);
                    Subject = ("Email Confirmation");
                    ViewBag.Url = callbackUrl;
                    return Email("ConfirmationMessage", model);
                }
    }

RegisterController:

代码语言:javascript
复制
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(Register model)
    {
        string confirmationToken = CreateGuid();
        Account account = new Account(model.Username, model.Password, model.FirstName, model.LastName, model.Email, false, confirmationToken);
        Session["accountID"] = Repository.InsertAccount(new Account(model.Username, model.Password, model.FirstName, model.LastName, model.Email, false, confirmationToken));
        var callbackUrl = Url.Action("registerconfirmation", "account", new { Id = "?" + confirmationToken }, protocol: Request.Url.Scheme);
        try
        {
            new EmailController().ConfirmationEmail(model, callbackUrl).Deliver();
        }
        catch (Exception e)
        {
            ModelState.AddModelError("ConfirmationMailFailed", "Problem sending email" + e.Message);
        }
        return View("emailconfirmation");
    }

电子邮件视图:

代码语言:javascript
复制
<p>To get started, please click <a href="@ViewBag.Url">here</a> to activate your account.</p>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-29 11:58:03

删除"?“。使用以下代码:

代码语言:javascript
复制
var callbackUrl = Url.Action("registerconfirmation", "account", new { Id = confirmationToken }, protocol: Request.Url.Scheme);

所以你的网址是- http://localhost:8159/account/registerconfirmation?Id=fv9egt7cjoEGQvHfauiYE1A

票数 1
EN

Stack Overflow用户

发布于 2016-04-29 10:48:16

当您使用Url.Action("A","B",new{a="x"})时,它会自动创建"/B/A?a=x“这样的查询字符串。所以你不需要加上?马克在那儿。有关更多相关信息,请查看MSDN引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36936009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档