如何创建 ViewResult 对象?

How can I create a ViewResult Object?

我使用的SDK是.net 6.0.201

控制器中有些情况需要return 404 页面。

目前我是这样实现的:

Response.StatusCode = 404;
///log something
return View("/Views/Others/Error.cshtml", 404);

但是,我需要将上面的代码添加到 return 404 页面所需的所有位置。不好管理代码。所以,我准备将它们全部移动到注入依赖项中 class 然后引用它:

public ViewResult ErrorView(HttpResponse Response)
        {
            Response.StatusCode = 404;
            ///log something
            return new ViewResult("/Views/Others/Error.cshtml", 404);
        }

现在,VS 报告错误:

CS1729:'ViewResult' does not contain a constructor that takes 2 arguments.

我的代码有什么问题?谢谢。

我认为要创建一个 ViewResult 对象,您需要给它一个字符串和一个 ViewDataDictionary 对象。 404 是整数而不是 ViewDataDictionary。

也许尝试像这样修改代码,如果可行请告诉我:

        {
            Response.StatusCode = 404;
            ///log something
            return new ViewResult(
               ViewName: "/Views/Others/Error.cshtml",
               ViewData: 
                   new ViewDataDictionary(new EmptyModelMetadataProvider(),
                                          new ModelStateDictionary())
                   {
                       Model = 404 // If the view is expecting an integer, 
                                   // if it's not, supply it with the correct model.
                   }
               });
        }

将您的代码更改为:

public ViewResult ErrorView(HttpResponse Response)
{
    Response.StatusCode = 404;
    var res = new ViewResult()
    {
        StatusCode = 404,
        ViewName = "/Views/Others/Error.cshtml"
    };
    return res;
}