2016-01-19 117 views
0

我試圖生成id作爲新的Guid,如果相同的路由配置中沒有提供,但它總是生成相同的NewGuid。這裏是我的代碼:WebAPI路由默認值Guid.NewGuid()

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

下面是操作方法:

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

無論我有多少時間調用該方法,我收到了同樣的答覆,直到除非我重建代碼。

"Message Received for User: f90b2d6c-29f0-44a0-ba4d-aa72ac25d520" 

有人可以請指導我這裏發生了什麼,以及如何實現所需的功能?

+6

路由配置只發生一次,當應用程序啓動。因此,您正在生成一個GUID並將其存儲。然後,在應用程序重新啓動之前,它始終是默認值。 –

+1

是URI中的_userId_?如果是這樣,你應該使用'FromUri'而不是'FromBody'。試一試 – MrFabio

+0

@JamesR。謝謝......清除困惑...然後你可以請指導我如何實現所需的功能,就像我將該參數設置爲RouteParameter.Optional路由無法匹配該動作並引發錯誤:未找到與請求URI'http:// localhost:31929/api/my/rout /'匹配的HTTP資源。 –

回答

0

好吧...添加到此處另一篇文章的方法解決的情況是最終代碼:

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(); 
} 
2

您可以將該參數定義爲可選。

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(); 
} 
+0

我試過,但在這種情況下,它拋出的錯誤:沒有HTTP資源找到匹配的請求URI'localhost:31929/api/my /路線/ –

+0

您是否將Guid參數定義爲可以爲空的'Guid? – Omar

+0

是的......我也是這樣做的:( –