小编Jam*_*ney的帖子

我可以使用内容协商将视图返回到ASP.NET核心中的浏览器和JSON到API调用吗?

我有一个非常基本的控制器方法,它返回一个客户列表.我希望它在用户浏览时返回列表视图,并将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# asp.net-mvc asp.net-core

12
推荐指数
1
解决办法
583
查看次数

这是goto的明确用法吗?

只是想知道这是否被认为是在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:普遍的共识似乎是这样

  • 在这里使用goto是没有必要的 - while循环可以做得很好.
  • 使用这样的例外并不是一个好主意 - 虽然我不知道该替换它.

c# goto

7
推荐指数
2
解决办法
503
查看次数

MouseCapture可防止所有基于鼠标的触发器在WPF中触发

我在拖放操作期间使用CaptureMouse()以确保我不会错过MouseUp事件,但这似乎可以防止任何鼠标事件到达我的Canvas上的任何其他对象.这意味着我的基于IsMouseOver的触发器不起作用,但我需要它们来指示可以删除对象的有效位置.

我这样做错了,还是有办法确保我的Canvas上的所有东西都能得到鼠标事件?

wpf

1
推荐指数
1
解决办法
863
查看次数

标签 统计

c# ×2

asp.net-core ×1

asp.net-mvc ×1

goto ×1

wpf ×1