首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DelegatingHandler请求来源

DelegatingHandler请求来源
EN

Stack Overflow用户
提问于 2014-08-25 16:02:13
回答 2查看 534关注 0票数 0

我有一个用于验证请求头中包含的ApiKey的DelegatingHandler:

代码语言:javascript
复制
public class ApiKeyHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (!ApiKey.VerifyRequest(request))
        {
            var response = request.CreateErrorResponse(HttpStatusCode.Forbidden, "Invalid Api Key");
            var tsc = new TaskCompletionSource<HttpResponseMessage>();
            tsc.SetResult(response);
            return tsc.Task;
        }

        return base.SendAsync(request, cancellationToken);
    }
}

现在我想扩展它来检查请求的来源,因为这个APIKey只对外部请求是必需的(CORS还没有被需要)。外部是由域及其独占的服务器到服务器定义的。

我找到了Is_Local属性,但这对我不起作用。

EN

回答 2

Stack Overflow用户

发布于 2014-08-26 17:33:22

我现在使用IP地址:((dynamic)request.Properties["MS_HttpContext"]).Request.UserHostAddress;

票数 0
EN

Stack Overflow用户

发布于 2014-09-06 00:58:07

由于你似乎需要呼叫者的IP,WebApiContrib有一个很好的扩展方法,既可以在自主机上工作,也可以在web主机上工作:

代码语言:javascript
复制
public static class HttpRequestMessageExtensions
{
    private const string HttpContext = "MS_HttpContext";
    private const string RemoteEndpointMessage = "System.ServiceModel.Channels.RemoteEndpointMessageProperty";

    public static string GetClientIpAddress(this HttpRequestMessage request)
    {
        if (request.Properties.ContainsKey(HttpContext))
        {
            dynamic ctx = request.Properties[HttpContext];
            if (ctx != null)
            {
                return ctx.Request.UserHostAddress;
            }
        }

        if (request.Properties.ContainsKey(RemoteEndpointMessage))
        {
            dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];
            if (remoteEndpoint != null)
            {
                return remoteEndpoint.Address;
            }
        }

        return null;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25481500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档