这里是 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)
{
}
您可以为 GET
和 POST
使用相同的方法名称,但该方法需要不同的签名(重载)。
[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/