mvc-request.params get例外の最初の「get」結果、2番目の「get」は問題ありません。xmlテキストを含むフィールドがあるページがあります。私はvalidation=falseを使用しています。しかし、コントローラーのpostメソッドで、requset.paramsを取得しようとすると、「潜在的に危険なRequest.Form値がクライアントから検出されました」というエラーが表示されます。いくつか掘り下げてデバッグした後、初めてrequest.paramsを取得しようとすると例外が発生しますが、2回目に取得しようとするとすべて問題ありません。
これは、xmlの問題を回避するために使用しているフィルターです(バイナリデータに変換し、xml文字列フィールドを空にします)。
public class RestAPIAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
((SimulationModel)filterContext.ActionParameters["model"]).Data = CommonConverters.StringToByteArray(((SimulationModel)filterContext.ActionParameters["model"]).StringData);
((SimulationModel)filterContext.ActionParameters["model"]).StringData = string.Empty;
base.OnActionExecuting(filterContext);
}
}
これはpostメソッドです:
[HttpPost]
[ValidateInput(false)]
[RestAPIAttribute]
public ActionResult EditSimulation(Guid id, SimulationModel model)
{
try
{
model.RelationModel = new RelationModel(false, this.Resource("Simulations.AddToObjects"), "SimulationToObjects", id, sessionId, Request.Params, new List<ObjectTypes>() { ObjectTypes.Entity, ObjectTypes.EntityType, ObjectTypes.Universe });
}
catch (Exception ex)
{
Logger.LogException(ex);
}
/* more code here*/
return View(newModel);
}
ご覧のとおり、RelationModelのコンストラクターの1つにrequest.paramのパラメーターがあり、問題が発生しています。
この問題に対する私の現在の回避策は、2回呼び出すだけです(ただし、より良い解決策または少なくとも説明を探しています):
[HttpPost]
[ValidateInput(false)]
[RestAPIAttribute]
public ActionResult EditSimulation(Guid id, SimulationModel model)
{
try
{
try
{
model.RelationModel = new RelationModel(false, this.Resource("Simulations.AddToObjects"), "SimulationToObjects", id, sessionId, Request.Params, new List<ObjectTypes>() { ObjectTypes.Entity, ObjectTypes.EntityType, ObjectTypes.Universe });
}
catch
{
model.RelationModel = new RelationModel(false, this.Resource("Simulations.AddToObjects"), "SimulationToObjects", id, sessionId, Request.Params, new List<ObjectTypes>() { ObjectTypes.Entity, ObjectTypes.EntityType, ObjectTypes.Universe });
}
}
catch (Exception ex)
{
Logger.LogException(ex);
}
/* more code here*/
return View(newModel);
}