2015-12-16 64 views
0

我是新的ASP.Net Web API,並希望開發一個樣本來獲取日期時間。 我開發了兩個應用程序。第一個是我有我的API並運行它扔Visual Studio和另一個是控制檯應用程序來測試第一個。如何在ASP.Net Web API上獲取日期和時間?

在我的API我有:

public class DateTimeController : ApiController 
{ 
    public DateTime Get() 
    { 
     return DateTime.Now; 
    } 
} 

,並在我的控制檯應用程序,我有這個,但我不知道它的正確與否,因爲它不工作:

static void Main(string[] args) 
    { 
     string baseAddress = "http://localhost:13204/api/DateTime/get"; 

     using (HttpClient httpClient = new HttpClient()) 
     { 
      Task<String> response = 
      httpClient.GetStringAsync(baseAddress); 

     } 
     Console.ReadLine(); 
    } 

快速觀看響應: response.Status = WaitingForActivation
response.id = 4 response.AsyncState = NULL

WebApiConfig.cs

public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 

RouteConfig.cs

這裏
public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "DateTime", action = "Get", id = UrlParameter.Optional } 
     ); 
    } 
} 
+0

用'Get'替換'Getdate()' – Ofiris

+0

@Ofiris改變它但不起作用:( – motevalizadeh

+1

更新你的問題,以反映你沒有在網址中包含缺口,並顯示你的路由(通常在RouteConfig.cs)最後,描述「不起作用」,你會得到一個錯誤嗎?錯誤信息是什麼? – mason

回答

2

的幾個問題。

HttpClient.GetStringAsync返回一個Task<string>但你甚至沒有把結果分配給一個變量(或者至少你不是當你第一次發佈問題時)。使用返回任務的方法,你需要await或等待它們,直到任務完成。在控制檯應用程序中執行此操作的很多方法描述如下here。我將選擇一個並告訴你如何實現它。

static void Main(string[] args) 
{ 
    var cts = new CancellationTokenSource(); 

    System.Console.CancelKeyPress += (s, e) => 
    { 
     e.Cancel = true; 
     cts.Cancel(); 
    }; 

    MainAsync(args, cts.Token).Wait(); 
} 

static async Task MainAsync(string[] args, CancellationToken token) 
{ 
    string baseAddress = "http://localhost:13204/api/DateTime"; 

    using (var httpClient = new HttpClient()) 
    { 
     string response = await httpClient.GetStringAsync(baseAddress); 
    } 
} 

response變量將是包含包裹在JSON的日期時間的字符串。然後,您可以使用您最喜歡的JSON解析庫(我喜歡Json.NET)來獲取該值。

請注意,沒有必要在URL中指定特定的操作方法,因爲我們發送了一個HTTP GET請求,並且由於該操作方法以「Get」開頭,因此該框架足夠智能以知道它應該映射到那個行動方法。

+0

返回此錯誤:{「響應狀態碼不表示成功:404(未找到)。」} – motevalizadeh

+0

@motevallizadeh更新了Web服務的URL。再試一次。 – mason

+0

你的意思是如果我在我的URL中輸入http:// localhost:13204/api/DateTime/get或類似的東西,它必須向我顯示一些頁面或結果ha? – motevalizadeh