从ASP.NET MVC和移动设备使用ASP.NET Web API

时间:2014-01-25 13:58:51

标签: asp.net asp.net-web-api

在对这个主题进行了很多徒劳的搜索之后,我需要在这里提出这个问题。

我打算开创一款在线多人纸牌游戏。最初,游戏只能通过Android手机(作为客户端)播放。但后来,我还想让iPhone用户可以访问它,并使其基于Web浏览器。

所有这三种类型的客户端(Android,iPhone和Web浏览器)应该能够连接到同一台服务器(实现游戏引擎),因此使用相同的逻辑和游戏规则 - 它们的客户端外观是什么会有所不同。

我已在ASP.NET中编程,这就是我计划在此处用作服务器端基础结构的内容。具体来说,我查看了ASP.NET Web API,它看起来很棒:我的三种类型的客户端简单地需要从Web API获取游戏数据作为json并呈现它。

这是我的问题: 我很清楚iPhone和Android将如何获取和使用来自Web API的json格式的游戏数据。但我不清楚网站版本(我认为是ASP.NET MVC)将如何使用Web API?简单地从MVC向Web API发出http请求是明智的 - 如果是的话,它会不会让它变慢?

基本上,我想编写一次游戏逻辑,通过Web APi将其暴露给使用它的许多不同类型的客户端。我想到的这种架构在图#3 here中精美地描绘出来 - 无法在此处发布图像。

图中的其他,代表我的iPhone和Android用户。

也欢迎其他方向的指示。 :) 谢谢

1 个答案:

答案 0 :(得分:3)

您的API控制器应该非常薄,您可以通过更远的方式提取业务逻辑来实现,例如:

public class GameController : ApiController
{
    GameLogic _gameLogic; // inject through constructor

    public PlayCardResult PlayCard(Card card)
    {
        return _gameLogic.PlayCard(card);       
    }   
}

然后从你的MVC前端,你可以基本上复制控制器,在GameLogic上执行相同的方法:

public class GameController : Controller
{
    GameLogic _gameLogic;

    [HttpPost]
    public ActionResult PlayCard(Card card)
    {
        var model = _gameLogic.PlayCard(card);
        return View(model);
    }   
}

或者,您可以让MVC控制器调用Web API,例如使用RestSharp

public class GameController : Controller
{
    WebAPIClient _webAPIClient;

    [HttpPost]
    public void PlayCard(Card card)
    {
        var model = _webAPIClient.PlayCard(card);
        return View(model);         
    }   
}

或者你可以让MVC变得愚蠢,让浏览器与WebAPI进行通信,例如using jQuery