创建操作 (C#)

Microsoft

了解如何将新操作添加到 ASP.NET MVC 控制器。 了解方法成为操作的要求。

本教程的目的是说明如何创建新的控制器操作。 了解操作方法的要求。 你还将了解如何防止方法作为操作公开。

向控制器添加操作

通过向控制器添加新方法,可以向控制器添加新操作。 例如,清单 1 中的控制器包含名为 Index () 的操作和名为 SayHello () 的操作。 这两种方法都作为操作公开。

列表 1 - Controllers\HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public string SayHello()
        {
            return "Hello!";
        }
    }
}

为了作为一种行动暴露在宇宙中,方法必须满足某些要求:

  • 方法必须是公共的。
  • 方法不能是静态方法。
  • 方法不能是扩展方法。
  • 方法不能是构造函数、getter 或 setter。
  • 方法不能具有打开的泛型类型。
  • 方法不是控制器基类的方法。
  • 方法不能包含 refout 参数。

请注意,控制器操作的返回类型没有限制。 控制器操作可以返回字符串、DateTime、Random 类的实例或 void。 ASP.NET MVC 框架会将任何不是操作结果的返回类型转换为字符串,并将字符串呈现到浏览器。

将不违反这些要求的任何方法添加到控制器时,该方法将作为控制器操作公开。 请小心。 连接到 Internet 的任何人都可以调用控制器操作。 例如,请勿创建 DeleteMyWebsite () 控制器操作。

阻止调用公共方法

如果需要在控制器类中创建公共方法,并且不希望将该方法公开为控制器操作,则可以使用 [NonAction] 属性阻止调用该方法。 例如,清单 2 中的控制器包含一个名为 CompanySecrets () 的公共方法,该方法使用 [NonAction] 属性进行修饰。

清单 2 - Controllers\WorkController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class WorkController : Controller
    {
        [NonAction]
        public string CompanySecrets()
        {
            return "This information is secret.";
        }
    }
}

如果尝试通过在浏览器的地址栏中键入 /Work/CompanySecrets 来调用 CompanySecrets () 控制器操作,则会在图 1 中收到错误消息。

调用 NonAction 方法

图 01:调用 NonAction 方法 (单击以查看全尺寸图像)