我正在开发我的第一个Asp.Net Core项目,该项目既支持Web客户端,也支持Game客户端(用Unity编写)。
现在,我开始使用Visual Studio 2015提供的默认 Asp.Net核心Web应用程序项目模板,包括个人用户帐户的身份验证。
大多数(如果不是所有生成的控制器都返回视图)通常遵循以下模式:
[HttpGet]
[AllowAnonymous]
public IActionResult Get()
{
//Do something smart
return View();
}
此方法返回 View ,如您所见,并且在Web客户端请求时一切正常。 但是如果Game正在向同一个方法发送请求怎么办? 在这种情况下,需要一个JSON响应(不是View / html文档),我的问题是在Asp.Net Core中支持它的推荐“模式”是什么?
我应该将api放回到单独的控制器中,从而复制一些逻辑吗?对我来说感觉不对......
或者我应该检查预期响应格式的请求,并实现基于此返回不同响应的逻辑? 我也不特别喜欢这种方法......
对我而言,似乎 Asp.Net Core 通过直接从API提供UI格式的响应来解决问题,但这可能是我在这里错过的......
任何指针?
答案 0 :(得分:2)
当返回类型为IActionResult时,您还可以返回Json消息,例如return Json(myReturnObject)
。您可以添加if
以返回JSON消息,当它为false时,它将返回视图。
您可以根据X-Requested-With
添加if:
if (Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
return Json(myObject);
}
我建议通过响应类型将请求拆分为不同的控制器方法,并将私有方法中的共享代码/逻辑添加到另一个类中,可能您也会在其他地方使用它。通过这样做,您将能够进行适当的测试,并且在返回视图或json消息时不会感到困惑。
希望这有帮助。
答案 1 :(得分:1)
如果您想要网页和游戏的单独控制器或操作,您可以将逻辑移动到控制器调用的类中。
这样会更好,遵循单一责任规则,而不是一个操作返回两种响应类型