asp.net-mvc - MVC HttpGet 属性

标签 asp.net-mvc asp.net-mvc-4

这里是 MVC 新手,无法从中找到足够简单的解释。

我刚刚开始使用 MVC 构建一个相当大的应用程序。

在我使用的 Controller 中,大多数 ActionResults 都附加了 [HttpGet] 属性。因此,我正在构建该代码,并且我自己构建了两个 ActionResults,但关闭了 [HttpGet] 属性。

这些调用数据库层,然后将结果返回给 View 。他们工作正常。当我注意到它们上面没有 [HttpGet] 时,我添加了它们,然后调用就停止了。我不明白为什么,或者他们必须在那里的韵律和原因。

这是我从 View 中发出的调用:

function getExcelExport() {
var activePane = $('div.tab-pane.active');

var agencyCompany = $(activePane).find('#Agency_AgencyId').val();
if (!$(activePane).find('#form0').valid()) { return false; }
var month = $(activePane).find('#CommissionMonth').val();
var year = $(activePane).find('#CommissionYear').val();

window.location = 'AgencyManagement/GetCommissionsExcel?agencyID=' + agencyCompany + '&month=' + month + '&year=' + year;
};

这是 Controller 中的操作:

        public ActionResult GetCommissionsExcel(string agencyid, string month, string year)
    {
        try
        {
            var as400rep = new iSeriesRepository(new iSeriesContext());
            var results = as400rep.GetCommissionExcel(agencyid, month, year);

            string xml = String.Empty;
            XmlDocument xmlDoc = new XmlDocument();

            XmlSerializer xmlSerializer = new XmlSerializer(results.GetType());

            using (System.IO.MemoryStream xmlStream = new System.IO.MemoryStream())
            {
                xmlSerializer.Serialize(xmlStream, results);
                xmlStream.Position = 0;
                xmlDoc.Load(xmlStream);
                xml = xmlDoc.InnerXml;
            }

            var fName = string.Format("CommissionsExcelExport-{0}", DateTime.Now.ToString("s"));
            fName = fName + ".xls";

            byte[] fileContents = System.Text.Encoding.UTF8.GetBytes(xml);

            return File(fileContents, "application/vnd.ms-excel", fName);
            }
        catch (Exception ex)
        {
            Log.Error(ex.Message, ex.InnerException);
            throw;
        }
    }

有没有简单的解释?

最佳答案

当您添加 [HttpGet] 并且调用“停止”工作时,原因是您将使用不同的 HTTP 动词调用该方法,例如发布

在方法上应用 Http 动词属性意味着,to restrict an action method so that the method handles only HTTP GET requests.

之所以在不使用 http 动词属性时一切正常,是因为该操作方法随后可通过所有 Http 动词使用。

[HttpPost] 标记该 Action 方法,它将起作用。

[HttpPost]
public ActionResult Action(int id)
{
}

您可以为 GETPOST 使用相同的方法名称,但该方法需要不同的签名(重载)。

[HttpGet]
public ActionResult Action() { }

[HttpPost]
public ActionResult Action(int id) { }

这通常用于 PRG 模式(POST、重定向、GET)。您可以进一步阅读 here

关于asp.net-mvc - MVC HttpGet 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33783562/

相关文章:

asp.net-mvc - IIS 显示文件夹内容列表而不是运行网站(mvc 应用程序)

c# - 将 DateTime 绑定(bind)到单独的日期和时间字段的最佳方法?

c# - 无法确定类型之间关联的主体端 - Entity Framework 错误,同一类之间的类关系

c# - 在单独的线程中执行 Action 以解除对 UI 的阻塞

c# - asp.net mvc4 生成新的帐户确认 token

c# - 如何在 asp.net mvc 4 的 apicontroller 中使用 session

ASP.NET 中密码输入的 CSS 样式不显示

asp.net-mvc - ASP.net MVC - View 上的多个表单,每个表单调用不同的操作,但需要再次显示相同的 View

asp.net-mvc - MVC - 从 View 写入 Head 部分

iis - windows azure 或 IIS 初始加载缓慢