从 System.Web.Mvc.Controller 端点获取 multipart/form-data
Get multipart/form-data from System.Web.Mvc.Controller endpoint
我有这段简单的代码:
public class TestController : System.Web.Mvc.Controller
{
/// <summary>
/// Used for test
/// </summary>
[ResponseType(typeof(string))]
public ActionResult Index()
{
try
{
// How to get multipart data here?
var result = new JsonResult();
result.Data = ValidateSignedRequest(content);
return result;
}
catch (Exception ex)
{
throw ex;
}
}
/// Example signed_request variable from request multipart/form-data
//private string VALID_SIGNED_REQUEST = "ZcZocIFknCpcTLhwsRwwH5nL6oq7OmKWJx41xRTi59E.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOiIxMjczMzU5NjAwIiwib2F1dGhfdG9rZW4iOiIyNTQ3NTIwNzMxNTJ8Mi5JX2VURmtjVEtTelg1bm8zakk0cjFRX18uMzYwMC4xMjczMzU5NjAwLTE2Nzc4NDYzODV8dUk3R3dybUJVZWQ4c2VaWjA1SmJkekdGVXBrLiIsInNlc3Npb25fa2V5IjoiMi5JX2VURmtjVEtTelg1bm8zakk0cjFRX18uMzYwMC4xMjczMzU5NjAwLTE2Nzc4NDYzODUiLCJ1c2VyX2lkIjoiMTY3Nzg0NjM4NSJ9";
public bool ValidateSignedRequest(string request)
{
// ...
}
}
我发现 System.Web.Http.ApiController 很容易:
[Route("test")]
[ResponseType(typeof(string))]
[HttpPost]
[AllowAnonymous]
public async Task<IHttpActionResult> Test()
{
var signedRequest = HttpContext.Current.Request.Params["my_data_key"];
return Ok(await Task.FromResult(signedRequest));
}
但是这里我不得不使用System.Web.Mvc.Controller,我还没有找到解决办法。
有什么想法吗?谢谢!
我终于找到了我正在寻找的解决方法。我不知道这是否是最好的方法,但它确实有效!
您可以从 Request
的静态实例访问表单数据,如下所示:
[HttpPost]
[ResponseType(typeof(string))]
public ActionResult Index()
{
try
{
if (!Request.Form.AllKeys.Any() || Request.Form["signed_request"] == null)
throw new ArgumentNullException();
var result = new JsonResult();
string signedRequest = Request.Form["signed_request"];
result.Data = ValidateSignedRequest(signedRequest);
return result;
}
catch (Exception ex)
{
throw ex;
}
}
我有这段简单的代码:
public class TestController : System.Web.Mvc.Controller
{
/// <summary>
/// Used for test
/// </summary>
[ResponseType(typeof(string))]
public ActionResult Index()
{
try
{
// How to get multipart data here?
var result = new JsonResult();
result.Data = ValidateSignedRequest(content);
return result;
}
catch (Exception ex)
{
throw ex;
}
}
/// Example signed_request variable from request multipart/form-data
//private string VALID_SIGNED_REQUEST = "ZcZocIFknCpcTLhwsRwwH5nL6oq7OmKWJx41xRTi59E.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOiIxMjczMzU5NjAwIiwib2F1dGhfdG9rZW4iOiIyNTQ3NTIwNzMxNTJ8Mi5JX2VURmtjVEtTelg1bm8zakk0cjFRX18uMzYwMC4xMjczMzU5NjAwLTE2Nzc4NDYzODV8dUk3R3dybUJVZWQ4c2VaWjA1SmJkekdGVXBrLiIsInNlc3Npb25fa2V5IjoiMi5JX2VURmtjVEtTelg1bm8zakk0cjFRX18uMzYwMC4xMjczMzU5NjAwLTE2Nzc4NDYzODUiLCJ1c2VyX2lkIjoiMTY3Nzg0NjM4NSJ9";
public bool ValidateSignedRequest(string request)
{
// ...
}
}
我发现 System.Web.Http.ApiController 很容易:
[Route("test")]
[ResponseType(typeof(string))]
[HttpPost]
[AllowAnonymous]
public async Task<IHttpActionResult> Test()
{
var signedRequest = HttpContext.Current.Request.Params["my_data_key"];
return Ok(await Task.FromResult(signedRequest));
}
但是这里我不得不使用System.Web.Mvc.Controller,我还没有找到解决办法。
有什么想法吗?谢谢!
我终于找到了我正在寻找的解决方法。我不知道这是否是最好的方法,但它确实有效!
您可以从 Request
的静态实例访问表单数据,如下所示:
[HttpPost]
[ResponseType(typeof(string))]
public ActionResult Index()
{
try
{
if (!Request.Form.AllKeys.Any() || Request.Form["signed_request"] == null)
throw new ArgumentNullException();
var result = new JsonResult();
string signedRequest = Request.Form["signed_request"];
result.Data = ValidateSignedRequest(signedRequest);
return result;
}
catch (Exception ex)
{
throw ex;
}
}