我做错了什么?没有命中操作,错误是405 - >不允许用于访问路径“somepath”的HTTP谓词POST。
客户端脚本
$.post('/DecisionPoint/ApplicationState', { fileName: fileName, stateString: e });
filename只是一个'字符串',就像'e'
一样控制器操作
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveApplicationState(string fileName, string stateString)
{
string filePath = GetDpFilePath(fileName);
HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.Load(filePath);
HtmlNode stateScriptNode =
htmlDocument.DocumentNode.SelectSingleNode("/html/head/script[@id ='applicationState']");
stateScriptNode.InnerHtml = "var applicationStateJSON =" + stateString;
htmlDocument.Save(filePath);
return Json("State Updated");
}
更新
这是我的global.asax。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"DecisionPoint", // Route name
"{controller}/{action}/{fileName}/{stateString}", // URL with parameters
new { controller = "DecisionPoint", action = "ApplicationState", fileName = UrlParameter.Optional, stateString = UrlParameter.Optional} // Parameter defaults
);
现在出现错误 - 找不到资源。该脚本位于模板创建的标准/ Scripts文件夹中。
答案 0 :(得分:1)
你确定这是你控制和行动的途径吗?
Controllers/DecisionPoint/SaveApplicationState
因为通常“控制器”这个词没有出现在URL路径中,这就是jQuery需要用于访问此操作的确切URL路径。
试试这个:
string url = "/DecisionPoint/SaveApplicationState/" + filename + "/" + e;
jQuery.post(url);
问题是您已将路由映射到确切的URL,因此要发布到该操作,您需要重新创建URL。另请注意,我不知道这是否有意,但您的行动名称为SaveApplicationState
但是在路线映射中您将行动列为ApplicationState
。这需要保持一致。
答案 1 :(得分:1)
看起来您发布的网址不正确。在Asp.net MVC中,您不直接发布到控制器,而是发布到通常解析为控制器的路由。所以,例如,如果我有一个名为DecisionPointController
的控制器,其中一个动作(方法)被称为ApplicationState
(我将单词“保存”删除为更多RESTful,那么相应的网址将会是:
~/DecisionPoint/ApplicationState
。