簡體   English   中英

我應該為此使用WebApi嗎? ASP.net MVC

[英]Should I use WebApi for this? ASP.net MVC

我有一個關於MVC asp.net的問題,我有一個鏈接,該鏈接使用HTTP以這種XML格式提供數據。

 [...]
    <Item>
    <Name>Money</Name>
    <Unit>1000</Unit>
    </Item>
 [...]

如果要在應用程序的視圖中顯示數據,應該使用什么? 的WebAPI? 數據( <unit> )每隔幾分鍾更改一次,因此始終必須查看以顯示當前數據。

數據也可以采用JSON格式獲取。

為了消除所有現有答案和評論的混亂:您的實際問題陳述是這樣的:

我有一個第三方URL,當被請求時,它會為您提供一些我希望在MVC視圖的表中顯示的JSON。

這是非常瑣碎的。 請參閱將JSON反序列化為對象以生成用於反序列化JSON的類。 這為您提供了可以從代碼中使用的靜態類型的類。

然后定義一個視圖模型來保存項目列表:

public class JsonViewModel
{
    public List<JsonItem> Items { get; set; }
}

public class JsonItem
{
    public string Name { get; set; }
    public string Unit { get; set; }
}

然后在控制器中執行一個HTTP GET請求以檢索JSON( HTTP GET請求和XML answer ),進行解析,將其映射到您的視圖模型並返回到您的視圖:

public class FooController : Controller
{
    public ActionResult Index()
    {
        // 1. Perform HTTP request to retrieve the JSON.
        var webClient = new WebClient();
        string rawJson = webClient.DownloadString("json-url");

        // 2. Parse the JSON.
        var jsonRootObject = JsonConvert.DeserializeObject<JsonRootObject>(rawJson);

        // 3. Map to your viewmodel
        var viewModel = new JsonViewModel
        {
            Items = jsonRootObject.Items.Select(i => new JsonItem
            {
                Name = i.Name,
                Unit = i.Unit
            }).ToList()
        };

        // 4. Return the model to your view
        return View(viewModel);
    }
}

然后最后在視圖中渲染模型:

@model JsonViewModel

<table>
    <tr>
        <th>Name</th><th>Unit</th></tr>
    </tr>
@foreach (var item in Model.Items)
{
    <tr>
        <td>@item.Name</td><td>@item.Unit</td>
    </tr>
}
</table>

在您的控制器中,調用外部服務以獲取數據。 可以是XML,但JSON更輕巧; 我會去的。 將數據解析為視圖模型,然后將其傳遞給視圖。 視圖模型以最適合您的視圖的格式包含解析的信息。 這將確保您的視圖可以保持盡可能簡單(關注視圖邏輯)。

為了使您的控制器保持清醒,您可能想要決定在專用組件中移動檢索和解析邏輯,並在控制器中使用它們。

基本上,使用什么(JSON或View)完全取決於您,並且取決於您的知識。

您可以在頁面中使用JSON(甚至XML)和js代碼,或者使用部分視圖和更少的js代碼,在這里滿足您的需求。

我建議您從MVC控制器返回部分視圖並更新整個塊。

我更喜歡Json而不是Xml,因為它是輕量級的,所以...您可以通過三種不同的方式:

  1. 創建一個在asp.net mvc應用程序內部的Controller中返回JsonResult的方法(我認為您正在執行的操作);
  2. 在asp.net mvc應用程序內創建一個WebApiController只是為了使Web api內容而無需創建新的應用程序;
  3. 創建一個Web Api應用程序並返回您的數據(如果您只需要一項服務,我認為您不應該為此創建一個新應用程序,這是太多的工作)

如果您選擇第三個選項,但您對Web Api不熟悉,我建議您閱讀此內容

您可以簡單地使用setInterval對第三方端點進行定期ajax調用,然后相應地更新視圖。 更好的方法是使用MVVM,因此您只需要更新視圖模型,框架即可完成其余工作。

如果要使站點與第三方脫鈎,或者只想隱藏該第三方地址,則可以使用Web Api調用第三方端點,並從客戶端調用Web api端點。 如果Web API在其他域中,則需要以這種方式處理CORS

您也可以使用mvc action代替Web api,但是如果您打算構建大型應用程序。 最好開始使用SOA體系結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM