IActionFilter中的ActionExecutingContext和ActionExecutedContext中的请求是否具有唯一的ActionDescriptor.Id?

时间:2018-07-20 10:14:30

标签: asp.net-core asp.net-core-mvc asp.net-core-2.0

给出以下代码(使用.Net Core 2.0和Microsoft.AspNetCore.Mvc v2.0.2):

public class MyFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        var mayOrMayNotBeUniquePerRequest = context.ActionDescriptor.Id;
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        var mayOrMayNotBeUniquePerRequest = context.ActionDescriptor.Id;
    }
}

我的问题是,这些ID是否“按要求”?还是“按动作”?我看过这里-https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.abstractions.actiondescriptor?view=aspnetcore-2.0-尚不清楚。

为澄清起见,按照Startup.cs中的以下代码使用过滤器:

services.AddMvc(config =>
{
   config.Filters.Add(new RequestLoggingFilter());
});

谢谢。

2 个答案:

答案 0 :(得分:1)

由于我有相同的问题,因此请继续进行后续操作,如果您查看GitHub上的源代码,则每个操作都是一个新值:

public class ActionDescriptor
{
    public ActionDescriptor()
    {
        Id = Guid.NewGuid().ToString();
        // ...
    }

    /// <summary>
    /// Gets an id which uniquely identifies the action.
    /// </summary>
    public string Id { get; }

我的测试表明,调用操作时会生成ID,并且该值保持恒定,直到您的站点停止/启动或回收为止。该值将不同。因此,每个请求的ID都相同,并且不是唯一的。

Id:75c077ac-5402-444d-8a1b-73bdfc30f8ef ID:75c077ac-5402-444d-8a1b-73bdfc30f8ef 回收 ID:ef19524e-4fd3-4386-b15d-e5f3d65beb26

参考:AspNetCore/ActionDescriptor.cs

答案 1 :(得分:-1)

答案是“按动作”。我针对两个不同的请求进行了测试,并且ID相同。