L'Accès Raw Du Corps De La Requête

J'essaye d'accéder à une demande de brut de l'entrée de carrosserie/flux de ASP.net 5. Dans le passé, j'ai été en mesure de réinitialiser la position du flux d'entrée de 0 et de le lire dans un flux de mémoire, mais lorsque je tente de le faire le contexte le flux d'entrée est soit null ou renvoie une erreur (le Système.NotSupportedException => "méthode Spécifiée n'est pas prise en charge.").

Dans le premier exemple ci-dessous je peux accéder à la demande brute dans un contrôleur, si je déclare la méthode de contrôleur de paramètre du type d'objet dynamique. Pour diverses raisons, ce n'est pas une solution et j'ai besoin d'accéder à la demande brute corps dans un filtre d'authentification, de toute façon.

Que cet Exemple Fonctionne, Mais n'Est Pas une Solution Raisonnable:

[HttpPost("requestme")]
public string GetRequestBody([FromBody] dynamic body)
{   
    return body.ToString();
}

Déclenche Une Erreur:

[HttpPost("requestme")]
public string GetRequestBody()
{
    var m = new MemoryStream();
    Request.Body.CopyTo(m);

    var contentLength = m.Length;

    var b = System.Text.Encoding.UTF8.GetString(m.ToArray());

    return b;
}

Déclenche Une Erreur:

[HttpPost("requestme")]
public string GetRequestBody()
{
    Request.Body.Position = 0;
    var input = new StreamReader(Request.Body).ReadToEnd();

    return input;
}

Déclenche Une Erreur:

[HttpPost("requestme")]
public string GetRequestBody()
{
    Request.Body.Position = 0;
    var input = new MemoryStream();
    Request.Body.CopyTo(input);

    var inputString = System.Text.Encoding.UTF8.GetString(input.ToArray());

    return inputString;
}

J'ai besoin d'accéder à la demande brute corps de chaque demande qui concerne une API que je suis bâtiment.

Toute aide ou une orientation serait grandement apprécié!

EDIT:

Voici le code que je voudrais lire le corps de la requête.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Http;

namespace API.Filters
{
    public class CustomAuthorizationAttribute : Attribute, IAuthorizationFilter
    {
        public CustomAuthorizationAttribute()
        { }

        public void OnAuthorization(AuthorizationContext context)
        {
            if (context == null)
                throw new ArgumentNullException("OnAuthorization AuthorizationContext context can not be null.");
            else
            {
                if (this.AuthorizeCore(context.HttpContext) == false)
                {
                    //Do Other Stuff To Check Auth
                }
                else
                {
                    context.Result = new HttpUnauthorizedResult();
                }
            }
        }

        protected virtual bool AuthorizeCore(HttpContext httpContext)
        {
            var result = false;

            using (System.IO.MemoryStream m = new System.IO.MemoryStream())
            {
                try
                {
                    if (httpContext.Request.Body.CanSeek == true)
                        httpContext.Request.Body.Position = 0;

                    httpContext.Request.Body.CopyTo(m);

                    var bodyString = System.Text.Encoding.UTF8.GetString(m.ToArray());

                    return CheckBody(bodyString); //Initial Auth Check returns true/false <-- Not Shown In Code Here on Stack Overflow
                }
                catch (Exception ex)
                {
                    Logger.WriteLine(ex.Message);
                }
            }
                return false;
        }
    }
}

Le code pourrait être accessibles lorsqu'un appel est effectué à une méthode de contrôleur marqué avec le CustomAuthorization attribut comme si.

[Filters.CustomAuthorizationAuthorization]
[HttpPost]
public ActionResult Post([FromBody]UserModel Profile)
{
    //Process Profile
}
Quelle est l'erreur qui est jeté?
j'ai besoin d'accéder à la demande brute corps dans un filtre d'authentification de toute façon ... ce q&a peut vous être utile stackoverflow.com/q/31464359/571637
l'erreur est le haut de mon post de son Système.NotSupportedException Message -> "méthode Spécifiée n'est pas prise en charge."

OriginalL'auteur Badger Dev | 2015-07-28