1

Oauth2 用の .NET ライブラリである MVC 用の OAuth 2.0 を使用しています。ただし、私は Web Api プロジェクトを構築しており、このライブラリを Web Api で動作させることを望んでいます。

私が直面している問題は、ライブラリがコントローラーから呼び出す HttpRequestBase で 2 つの拡張メソッドを使用していることです。

拡張メソッドは次のとおりです。

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() を呼び出すだけです。もちろん、Web Api のリクエストは HttpRequestMessage です。残念ながら、HttpRequest と HttpRequest メッセージの違いに対処することは、現時点では私の能力を超えています。

この拡張メソッドを HttpRequestMessage で動作するように変換したり、何らかの形で Web Api で動作させることはできますか?

ありがとう!

4

1 に答える 1

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;
        }
    }
}
于 2012-10-25T08:41:25.080 に答える