获取用于MVC书面HttpRequest的扩展方法在网络API工作(Getting HttpRequ

2019-10-17 07:58发布

我使用OAuth 2.0为MVC,一个.NET库的oauth2工作。 我建立一个Web API项目,但是,我希望能得到这个库的Web API来工作。

我遇到的问题是,该库使用上,它从控制器调用HttpRequestBase两个扩展方法。

下面是扩展方法:

public static string GetToken(this HttpRequest request)
    {
        var wrapper = new HttpRequestWrapper(request);
        return GetToken(wrapper);
    }

    public static string GetToken(this HttpRequestBase request)
    {
        if (request == null)
            return String.Empty;

        // Find Header
        var headerText = request.Headers[OAuthConstants.AuthorzationHeader];
        if (!String.IsNullOrEmpty(headerText))
        {
            var header = new AuthorizationHeader(headerText);
            if (string.Equals(header.Scheme, "OAuth", StringComparison.OrdinalIgnoreCase))
                return header.ParameterText.Trim();
        }

        // Find Clean Param
        var token = request.Params[OAuthConstants.AuthorzationParam];
        return !String.IsNullOrEmpty(token)
            ? token.Trim()
            : String.Empty;
    }

在MVC项目,他们只是从控制器调用Request.GetToken()。 当然,网络API的请求是HttpRequestMessage。 恐怕寻址消息是超出了我的能力,现在之间的HttpRequest和HttpRequest的区别。

我可以把这个扩展方法与HttpRequestMessage工作或以某种方式使其在网络API工作吗?

谢谢!

Answer 1:

你曾经有过的所有属性仍然可用(假设OAuthConstants.AuthorzationParam设置查询字符串?)

using System;
using System.Linq;
using System.Net.Http;

namespace YourApp
{
    public static class Extensions
    {
        public static string GetToken(this HttpRequestMessage request)
        {
           if (request == null)
               return String.Empty;

           // Find Header
           var headerText = request.Headers.GetValues(OAuthConstants.AuthorzationHeader).SingleOrDefault();
           if (!String.IsNullOrEmpty(headerText))
           {
               //Brevity...
           }

           // Find Clean Param
           var token = request.GetQueryNameValuePairs().SingleOrDefault(x => x.Key == OAuthConstants.AuthorzationParam).Value;
           return !String.IsNullOrEmpty(token)
               ? token.Trim()
               : String.Empty;
       }
   }

}

调节器

using System.Collections.Generic;
using System.Web.Http;
using YourApp;

namespace YourApp.Controllers
{
    public class FoosController : ApiController
    {
        public IEnumerable<string> Get()
        {
            var token = Request.GetToken();

            return null;
        }
    }
}


文章来源: Getting HttpRequest extension method written for MVC to work in Web Api