如何指示控制器中的方法不是动作方法? - c#

我有一种情况想要使用页面特定的控制器。在那个控制器中,我有一个动作方法和许多辅助方法。在现实生活中,辅助方法是从BaseController继承的,但是为了简单起见,假设我在控制器类中直接有一个辅助方法,如下所示:

[Route("/dev/test")]
public class TestController : Controller {

    public IActionResult Get() {
        return UnprocessedEntityResult();
    }

    //Some helper method that I don't want to be considered an 
    //action method by the routing engine.
    public IActionResult UnprocessedEntityResult() {
        return StatusCode(StatusCodes.Status422UnprocessableEntity);
    }
}

我特别想使用基于属性的路由,并且希望在类级别指定该基于属性的路由。

鉴于上述情况,访问AmbiguousActionException路由时将抛出/dev/test,并指出

AmbiguousActionException:匹配多个动作。以下操作与路线数据匹配并满足所有约束:

App.Dev.TestController.Get
App.Dev.TestController.UnprocessedEntityResult

如何告诉路由引擎UnprocessedEntityResult()不是操作方法?我假设必须有一些可以应用到该方法的属性,但尚未能够找到它。

参考方案

查找[NonAction]属性。

指示控制器方法不是动作方法。

[Route("/dev/test")]
public class TestController : Controller {
    [HttpGet]
    public IActionResult Get() {
        return UnprocessedEntityResult();
    }

    [NonAction]
    public IActionResult UnprocessedEntityResult() {
        return StatusCode(StatusCodes.Status422UnprocessableEntity);
    }
}

或者您也可以保护该操作。

[Route("/dev/test")]
public class TestController : Controller {
    [HttpGet]
    public IActionResult Get() {
        return UnprocessedEntityResult();
    }

    protected IActionResult UnprocessedEntityResult() {
        return StatusCode(StatusCodes.Status422UnprocessableEntity);
    }
}

派生类型将可见,但不会混淆路由表

ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#

我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

Asp.net Core 2.1记录 - c#

我想了解登录asp.net cortex 2.1的问题。我的目标是注册所有可能导致kestrel服务器损坏的严重错误。据我从文档中了解Microsoft.Extensions.Logging和Serilog,您需要在每个控制器中创建一个记录器,并设置记录条件(例如try / catch)。是否有一种更方便的方法可以从一个地方记录项目中的任何严重错误?我将不胜…

在ASP.NET Core 2.1中添加自定义TagHelpers - c#

我严格按照ASP.NET Core文档进行操作,并花费了大量时间来拖曳堆栈溢出,试图实现简单的自定义TagHelper,但没有成功。任何人都可以就任何陷阱或已知错误提出建议吗?应用程序属性:AssemblyName: AmpWeb Target Framework .NET Core 2.1 NuGet软件包Microsoft.AspNetCore.All …

如何基于框架执行不同的动作? (ASP.NET 5) - c#

假设您必须将C#应用程序从.NET框架迁移到新的.NET Core,因为您希望拥有其中的一些新功能。您拥有自己的代码库,并且希望一次获得完整的工作部件,因为一次迁移所有的工作量很大。主要思想是成为未来的完全核心。我的问题是:有没有一种方法可以检查一个框架中存在但另一个框架中没有的功能?还是根据框架执行不同的动作? 参考方案 有编译器指令(#if)来检查与两个…