为什么控制器方法的参数是空的Guid?

时间:2017-11-26 19:24:58

标签: c# asp.net .net asp.net-mvc

ASP.NET Core MVC 2

客户端代码:

static void Get(Uri uri, DownloadStringCompletedEventHandler callback)
{
    var client = new WebClient();
    client.DownloadStringCompleted += callback;
    // Here uri is http://localhost:61698/Home/Task/aa348338-d367-4635-a5e5-9208c9d0e6a5
    client.DownloadStringAsync(uri);
}

服务器端(控制器方法):

[HttpGet]
public string Task(Guid guid)
{
    // Here guid is {00000000-0000-0000-0000-000000000000}
    // instead of aa348338-d367-4635-a5e5-9208c9d0e6a5
}

为什么这里guid是空的&我该如何解决?

1 个答案:

答案 0 :(得分:2)

您尚未分享路线定义。如果使用默认路由定义,则需要在URL中显式指定参数名称,因为它未命名为id

这应该有用。

yourSiteBaseUrl/Home/task?guid=aa348338-d367-4635-a5e5-9208c9d0e6a5

您可以将参数名称更改为id,现在您可以使用/controllername/actionname/{id}格式的请求网址,该格式被定义为默认路由注册。

[HttpGet]
public string Task(Guid id)
{
    return id.ToString();
}

现在,网址yourSiteBaseUrl/Home/task/aa348338-d367-4635-a5e5-9208c9d0e6a5 将起作用

如果您仍希望将参数名称用作guid,但希望将url模式用作actionName/guidValue,则可以使用属性路由为此操作方法定义自定义路由模板。 / p>

使用Route属性定义路径模板。

[HttpGet]
[Route("Home/task/{guid:Guid}")]
public string Task(Guid guid)
{
    return guid.ToString();
}

现在,网址yourSiteBaseUrl/Home/task/aa348338-d367-4635-a5e5-9208c9d0e6a5 将起作用