C# WebAPI路由默认值Guid.NewGuid()

C# WebAPI路由默认值Guid.NewGuid(),c#,asp.net-web-api,C#,Asp.net Web Api,如果路由配置中没有提供相同的id,我尝试将其生成为新Guid,但它始终生成相同的新Guid。这是我的密码: config.Routes.MapHttpRoute( 名称:“我的路线”, routeTemplate:“api/my/route/{userID}”, 默认值:new{controller=“my”,userID=Guid.NewGuid()} ); 以下是行动方法: publicstringpost([FromBody]字符串值,Guid userID) { return“为用户接

如果路由配置中没有提供相同的id,我尝试将其生成为新Guid,但它始终生成相同的新Guid。这是我的密码:

config.Routes.MapHttpRoute(
名称:“我的路线”,
routeTemplate:“api/my/route/{userID}”,
默认值:new{controller=“my”,userID=Guid.NewGuid()}
);
以下是行动方法:

publicstringpost([FromBody]字符串值,Guid userID)
{
return“为用户接收的消息:+userID.ToString();
}
无论我调用该方法多少次,我都会收到相同的响应,除非我重新生成代码

“为用户接收的消息:f90b2d6c-29f0-44a0-ba4d-aa72ac25d520”

有人能告诉我这里发生了什么以及我如何实现所需的功能吗?

您可以将参数定义为可选参数

config.Routes.MapHttpRoute(
    name: "myroute",
    routeTemplate: "api/my/route/{userID}",
    defaults: new { controller = "my", userID = RouteParameter.Optional }
);
然后在动作中指定一个值(如果未指定)

public string Post([FromBody]string value, Guid? userID)
{
    userID = userID ?? Guid.NewGuid();

    return "Message Received for User: " + userID.ToString();
}

可以将参数定义为可选参数

config.Routes.MapHttpRoute(
    name: "myroute",
    routeTemplate: "api/my/route/{userID}",
    defaults: new { controller = "my", userID = RouteParameter.Optional }
);
然后在动作中指定一个值(如果未指定)

public string Post([FromBody]string value, Guid? userID)
{
    userID = userID ?? Guid.NewGuid();

    return "Message Received for User: " + userID.ToString();
}

好的。。。通过添加另一个post方法解决了此问题最终代码如下:

config.Routes.MapHttpRoute(
    name: "myroute",
    routeTemplate: "api/my/route/{userID}",
    defaults: new { controller = "my", userID = RouteParameter.Optional }
);

public string Post([FromBody]string value, Guid userID)
{
    return "Message Received for User: " + userID.ToString();
}

public string Post([FromBody]string value)
{
    Guid userID = Guid.NewGuid();
    return "Message Received for User: " + userID.ToString();
}

好的。。。通过添加另一个post方法解决了此问题最终代码如下:

config.Routes.MapHttpRoute(
    name: "myroute",
    routeTemplate: "api/my/route/{userID}",
    defaults: new { controller = "my", userID = RouteParameter.Optional }
);

public string Post([FromBody]string value, Guid userID)
{
    return "Message Received for User: " + userID.ToString();
}

public string Post([FromBody]string value)
{
    Guid userID = Guid.NewGuid();
    return "Message Received for User: " + userID.ToString();
}

路由配置仅在应用程序启动时发生一次。因此,您将生成一个GUID并存储它。然后,在应用程序重新启动之前,它始终是默认值。用户ID在URI中吗?如果是这样,您应该使用
FromUri
而不是
FromBody
。给它一个try@JamesR. 谢谢清除混乱。。。然后,请您指导我如何实现所需的功能,就像我将该参数设置为
RouteParameter一样。可选的
路由无法与该操作匹配,它会引发错误:未找到与请求URI“”匹配的HTTP资源。我不确定“所需的功能”是什么。但是,如果您希望在该Post方法中使用新GUID,则必须再次调用GUID.NewGuid()。确切地说,我必须调用它,因为它在Post操作之前不会到达。路由配置仅在应用程序启动时发生一次。因此,您将生成一个GUID并存储它。然后,在应用程序重新启动之前,它始终是默认值。用户ID在URI中吗?如果是这样,您应该使用
FromUri
而不是
FromBody
。给它一个try@JamesR. 谢谢清除混乱。。。然后,请您指导我如何实现所需的功能,就像我将该参数设置为
RouteParameter一样。可选的
路由无法与该操作匹配,它会引发错误:未找到与请求URI“”匹配的HTTP资源。我不确定“所需的功能”是什么。但如果您想在Post方法中使用新的GUID,则必须调用GUID.NewGuid()再次说明。我必须调用它的确切位置,因为它在post操作之前未到达。我尝试了调用,但在本例中,它引发了错误:未找到与请求URI匹配的HTTP资源“localhost:31929/api/my/route/您是否将Guid参数定义为nullable
Guid?
Yes…”。。。我也这么做了:(我试过了,但在本例中它抛出了错误:没有找到与请求URI匹配的HTTP资源'localhost:31929/api/my/route/您是否将Guid参数定义为nullable
Guid?
Yes…我也这样做了:(