为什么 RedirectToActionResult ControllerName return NULL?

Why does RedirectToActionResult ControllerName return NULL?

我有一个 MVC 的 Xunit 测试 class:

using System;
using Xunit;
using Home.Controllers;
using Microsoft.AspNetCore.Mvc;
using Tester.Models;
using Xunit.Abstractions;

namespace ClassLibrary1
{

    public class Class1
    {

        [Fact]
        public void CreateinController()
        {
            HomeController c = new HomeController();

            var result = c.Create();

            //result moet een view zijn
            var viewResult = Assert.IsType<ViewResult>(result);

            //Juiste redirection

            var result2 = c.Create(null);

            var redirectToActionResult =
            Assert.IsType<RedirectToActionResult>(result2);

            Assert.Equal("Home", redirectToActionResult.ControllerName);
            Assert.Equal("BoekingVerwerken", redirectToActionResult.ActionName);


        }


    }
}

每当我 运行 测试 ActionName 通过测试时,因为它实际上包含值。但是ControllerName好像是NULL值,这是为什么呢? 当 Action 有值时,为什么 Controller 没有值?我应该把控制器放在 RTA 中吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Tester.Models;

namespace Home.Controllers
{
    public class HomeController : Controller
    {

        [HttpGet]
        public IActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public IActionResult Create(HotelBoeking boeking)
        {
            return RedirectToAction("BoekingVerwerken", boeking);
        }

        [HttpGet]
        public IActionResult BoekingVerwerken(HotelBoeking boeking)
        {
            return View(boeking);
        }

    }
}

如果你看一下 Controller.cs source code,你会看到 RedirectToAction returns 是 RedirectToRouteResult 类型,而不是 RedirectToActionResult 类型。

正如您从source code of RedirectToRouteResult.cs中看到的那样,您可以从RouteValues属性中获取控制器名称。这个类型没有ControllerName属性

var redirectToRouteResult =
        Assert.IsType<RedirectToRouteResult>(result2);

Assert.Equal("Home", redirectToRouteResult.RouteValues["controller"]);

I am not entirely sure the syntax for XUnit is correct, as I don't work with it much, but you should take away from this that because MVC is open source that questions like this one can be easily answered by inspecting the source code.