Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用OWIN中间件Web API发送响应_Asp.net_Json_Asp.net Web Api2_Owin_Owin Middleware - Fatal编程技术网

Asp.net 使用OWIN中间件Web API发送响应

Asp.net 使用OWIN中间件Web API发送响应,asp.net,json,asp.net-web-api2,owin,owin-middleware,Asp.net,Json,Asp.net Web Api2,Owin,Owin Middleware,我正试图在我的WebAPI2项目中自定义访问令牌json对象。 我已经成功地做到了。但我无法找出请求失败的原因 这是我的自定义响应:- {data:{},成功:0,消息:“failed”} 下面是ApplicationAuthProvider中的GrantResourceOwnerCredentials方法,它继承了OAuthAuthorizationServerProvider public override async Task GrantResourceOwnerCredentials(


我正试图在我的WebAPI2项目中自定义访问令牌json对象。 我已经成功地做到了。但我无法找出请求失败的原因

这是我的自定义响应:-
{data:{},成功:0,消息:“failed”}

下面是
ApplicationAuthProvider
中的
GrantResourceOwnerCredentials
方法,它继承了
OAuthAuthorizationServerProvider

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
    ApplicationUserManager userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
    ApplicationUser user = userManager.Find(context.UserName, context.Password);
    bool reqFailed = false;
    string reqFailedMsg = "";

    if (user == null)
    {
        reqFailed = true;
        reqFailedMsg = "The user name or password is incorrect.";
    }

    if (!reqFailed && !user.EmailConfirmed)
    {
        reqFailed = true;
        reqFailedMsg = "The user email is not confirmed.";
        //context.SetError("invalid_grant", "The user email is not confirmed.");
        //return;
    }

    if (!reqFailed && !user.IsActive)
    {
        reqFailed = true;
        reqFailedMsg = "The user is disabled.";
        //context.SetError("invalid_grant", "The user is disabled.");
        //return;
    }

    if (reqFailed)
    {
        try
        {
            context.Response.Headers.Add(LMS.Utilities.Constants.MyMiddlewareHeader, new[] { (400).ToString() });
            context.Response.Headers.Add(LMS.Utilities.Constants.MyMiddlewareHeaderMsg, new[] { reqFailedMsg });
        }
        catch (Exception ex)
        {
        } 
        return;
    }

    var form = await context.Request.ReadFormAsync();

    if (form["deviceType"] != null && form["deviceToken"] != null)
    {
        user.DeviceToken = form["deviceToken"];
        user.DeviceType = form["deviceType"];

        userManager.Update(user);
    }

    ClaimsIdentity oAuthIdentity = userManager.GenerateUserIdentity(userManager, user,
        OAuthDefaults.AuthenticationType);
    ClaimsIdentity cookiesIdentity = userManager.GenerateUserIdentity(userManager, user,
        CookieAuthenticationDefaults.AuthenticationType);

    AuthenticationProperties properties = CreateProperties(user.UserName);
    AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
    context.Validated(ticket);
    //context.Request.Context.Authentication.SignIn(cookiesIdentity);
    context.Request.Context.Authentication.SignIn(properties, cookiesIdentity);
    //return Task.FromResult<object>(null);
    }
正如您所看到的,这是无效的json

任何帮助都将不胜感激。 谢谢

public class AuthenticationMiddleware : OwinMiddleware
{
    public AuthenticationMiddleware(OwinMiddleware next) : base(next) { 

    }

    public override async Task Invoke(IOwinContext context)
    {
        await Next.Invoke(context);
        if (context.Response.Headers.ContainsKey(Constants.MyMiddlewareHeader))
        {
            using (var reader = new StreamReader(context.Request.Body))
            {
                var headerValues = context.Response.Headers.GetValues(Constants.MyMiddlewareHeader);
                context.Response.StatusCode = Convert.ToInt16(headerValues.FirstOrDefault());
                context.Response.Headers.Remove(Constants.MyMiddlewareHeader);

                var headerValuesMessage = context.Response.Headers.GetValues(Constants.MyMiddlewareHeaderMsg);
                string msg = headerValuesMessage.FirstOrDefault().ToString();
                context.Response.Headers.Remove(Constants.MyMiddlewareHeaderMsg);

                string resp = Newtonsoft.Json.JsonConvert.SerializeObject(new ResponseViewModel<object>(new { }, (int)ResponseStatus.Fail, msg));

                var response = context.Response;
                var body = await reader.ReadToEndAsync();
                var bytes = Encoding.UTF8.GetBytes(resp);

                response.ContentLength = bytes.Length;
                await response.WriteAsync(bytes);

                return;
            }
        }
    }
}
{"error":"invalid_grant"}{"Data":{},"Status":0,"Message":"The user name or