Получите данные multipart / form из System.Web. Mvc .Controller endpoint - PullRequest
1 голос
/ 17 марта 2020

У меня есть этот простой кусок кода:

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, и я пока не могу найти решение.

Есть идеи? спасибо!

1 Ответ

0 голосов
/ 17 марта 2020

Я наконец-то нашел обходной путь, который искал. Я не знаю, является ли это лучшим подходом, но он выполняет свою работу!

Вы можете получить доступ к данным формы из stati c экземпляра 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...