我有一个非常基本的控制器方法,它返回一个客户列表.我希望它在用户浏览时返回列表视图,并将JSON返回给application/jsonAccept标头中的请求.
这可能在ASP.NET Core MVC 1.0中吗?
我试过这个:
[HttpGet("")]
public async Task<IActionResult> List(int page = 1, int count = 20)
{
var customers = await _customerService.GetCustomers(page, count);
return Ok(customers.Select(c => new { c.Id, c.Name }));
}
Run Code Online (Sandbox Code Playgroud)
但是,默认情况下返回JSON,即使它不在Accept列表中.如果我在浏览器中点击"/ customers",我会得到JSON输出,而不是我的视图.
我以为我可能需要编写一个处理的OutputFormatter text/html,但我无法弄清楚如何View()从一个方法调用该方法OutputFormatter,因为这些方法已经打开Controller,我需要知道我想要渲染的View的名称.
有没有我可以调用的方法或属性来检查MVC是否能够找到OutputFormatter要呈现的内容?类似于以下内容:
[HttpGet("")]
public async Task<IActionResult> List(int page = 1, int count = 20)
{
var customers = await _customerService.GetCustomers(page, count);
if(Response.WillUseContentNegotiation)
{
return Ok(customers.Select(c => new { c.Id, c.Name }));
} …Run Code Online (Sandbox Code Playgroud) 只是想知道这是否被认为是在C#中明确使用goto:
IDatabase database = null;
LoadDatabase:
try
{
database = databaseLoader.LoadDatabase();
}
catch(DatabaseLoaderException e)
{
var connector = _userInteractor.GetDatabaseConnector();
if(connector == null)
throw new ConfigException("Could not load the database specified in your config file.");
databaseLoader = DatabaseLoaderFacade.GetDatabaseLoader(connector);
goto LoadDatabase;
}
Run Code Online (Sandbox Code Playgroud)
我觉得这样可以,因为代码片段很小,应该有意义.当你想在处理异常后重试操作时,人们通常会从这样的错误中恢复吗?
编辑:那很快.回答几个问题并稍微澄清一下 - 这是一个过程的一部分,本质上是从一个不同类型的项目转换而来._userInteractor.GetDatabaseConnector()调用是确定用户是否要重试的部分(可能使用与正在加载的配置中的数据库不同的数据库).如果它返回null,则表明没有指定新的数据库连接,操作应该完全失败.
我不知道为什么我没有考虑使用while循环.它必须太接近下午5点.
编辑2:我查看了LoadDatabase()方法,DatabaseLoaderException如果失败则会抛出一个.我已经更新了上面的代码来捕获异常而不是异常.
编辑3:普遍的共识似乎是这样
我在拖放操作期间使用CaptureMouse()以确保我不会错过MouseUp事件,但这似乎可以防止任何鼠标事件到达我的Canvas上的任何其他对象.这意味着我的基于IsMouseOver的触发器不起作用,但我需要它们来指示可以删除对象的有效位置.
我这样做错了,还是有办法确保我的Canvas上的所有东西都能得到鼠标事件?