【问题标题】:Web API Url.Link always returns nullWeb API Url.Link 始终返回 null
【发布时间】:2020-04-10 15:19:49
【问题描述】:

我在 WebApiConfig 中有以下设置

configuration.Routes.MapHttpRoute(
   name: "ConfirmEmailRoute",
   routeTemplate: "api/account/ConfirmEmail/{userId=userId}/{code=code}",
   defaults: new { userId = RouteParameter.Optional, code = RouteParameter.Optional }
);

控制器中的这个动作

[RoutePrefix("api/account")]
public class AccountController : BaseApiController
{

    [AllowAnonymous]
    [HttpGet]
    [Route("ConfirmEmail/{userId=userId}/{code=code}", Name = "ConfirmEmailRoute")]
    public async Task<IHttpActionResult> ConfirmEmail(string userId = "", string code = "")
    {
        if (string.IsNullOrWhiteSpace(userId) || string.IsNullOrWhiteSpace(code))
        {
            ModelState.AddModelError("", "User Id and Code are required");
            return BadRequest(ModelState);
        }

        var result = await this.UserManager.ConfirmEmailAsync(userId, code);

        if (result.Succeeded)
        {
            return Ok("Email has been successfully confirmed");
        }
        else
        {
            return GetErrorResult(result);
        }
    }
}

我正在使用以下内容来生成它的 URL

Url.Link("ConfirmEmailRoute", new { userId = user.Id, code = code })

但这总是返回 null。

我也尝试过添加控制器和动作:

Url.Link("ConfirmEmailRoute", new { userId = user.Id, code = code, controller = "Account", Action = "ConfirmEmail" })

也不行

参数名称相同,我不明白为什么它不起作用!

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api url-routing


    【解决方案1】:

    所以经过几次尝试,我发现如果我像这样更改 routeTemplate:

    routeTemplate: "api/account/ConfirmEmail/{userId}/{code}"
    

    Url.Link 将起作用,但现在查询字符串参数将不适用于 ConfirmEmail 操作。

    所以我决定放弃 Url.Link 并使用 Request 自己创建 URL,如下所示:

    var rootUrl = new Uri(Request.RequestUri, RequestContext.VirtualPathRoot).ToString();
    
    rootUrl += "api/account/ConfirmEmail?userId=userId&code=code";
    

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2016-05-31
      • 2015-08-15
      • 2012-03-18
      相关资源
      最近更新 更多