如何调用某些控制器的方法并从查询字符串传递参数

How to call some Controller's method and pass a parameters from a query string

在我的应用程序中,我生成了这样的 url:

http://www.test.com/?mail=test%40gmail.ba&code=71147ff9-87ae-41fc-b53f-5ecb3dbe5a01

我生成 Url 的方式如下:

private string GenerateUrl(string longUrl, string email, string confirmCode)
{
    try
    {
        // By the way this is not working (Home/MailConfirmed) I'm getting message 
        // Requested URL: /Home/MailConfirmed
        // The resource cannot be found.
        string url = longUrl + "/Home/MailConfirmed";
        var uriBuilder = new UriBuilder(url);
        var query = HttpUtility.ParseQueryString(uriBuilder.Query);
        query["mail"] = email;
        query["code"] = confirmCode;
        uriBuilder.Query = query.ToString();
        uriBuilder.Port = -1;
        url = uriBuilder.ToString();
        return url;
    }
    catch (Exception ex)
    {
        return "Error happened: " + ex.Message;
    }
}

In longUrl I'm passing www.test.com, in email I'm passing test@gmail.com and so on..

有关于我网站的信息:

www.test.com

mail:test@gmail.com

确认码:71147ff9-87ae-41fc-b53f-5ecb3dbe5a01

并且在我的 HomeController.cs 中有一个方法应该从查询字符串中取出参数 - url 并将其传递给应该通过邮件获取用户来激活用户帐户的方法(邮件是唯一)并将此 guid 与数据库中的 guid 进行比较。所以我想知道如何调用这个方法?

所以我的方法是这样的:

 public  JsonResult MailConfirmed(string mail, string confirmCode)
 {
       try
       {
           // Here I will get user and update it in DB
              return Json("success", JsonRequestBehavior.AllowGet);
       }
       catch(Exception ex)
       {
           return Json("fail", JsonRequestBehavior.AllowGet);
       }
  }

所以我的问题是用户如何点击关注 link 并调用我的方法.. ?

非常感谢 干杯

为了导航到您的 MailConfirmed(),您的 url 需要

http://www.test.com/Home/MailConfirmed?mail=test%40gmail.ba&confirmcode=71147ff9-87ae-41fc-b53f-5ecb3dbe5a01

注意控制器和动作名称的段,code=xxx 应该是 confirmcode=xxx 以匹配方法中的参数名称。

您可以通过使用 UrlHelper 方法生成 url) 来简化代码(并删除 GenerateUrl() 方法)。

要生成上述 url,您在控制器方法中只需要

string url = Url.Action("MailConfirmed", "Home", 
    new { mail = email, confirmcode = confirmCode },
    this.Request.Url.Scheme);