为什么RedirectToActionResult ControllerName返回NULL?

问题描述 投票:0回答:1

我有一个用于MVC的Xunit测试类:

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);
        }

    }
}
asp.net-mvc asp.net-mvc-4 xunit
1个回答
1
投票

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

source code of RedirectToRouteResult.cs可以看出,您可以从RouteValues属性中获取控制器名称。这种类型没有ControllerName属性。

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

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

我不完全确定XUnit的语法是正确的,因为我没有太多的工作,但你应该忽略这一点,因为MVC是开源的,通过检查源代码可以很容易地回答像这样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.