mvc web api只允许来自同一服务器的请求

mvc web api只允许来自同一服务器的请求,api,asp.net-web-api,asp.net-mvc-5,Api,Asp.net Web Api,Asp.net Mvc 5,我正在构建一个mvc应用程序,我正在制作一个api控制器,以允许来自一些前端页面的ajax请求。我想限制api控制器的操作,只允许来自我的服务器的请求(这样人们就不能从自己的站点调用我的api) 在进行了一些搜索之后,我找到了许多建议自定义授权属性的解决方案,我制作了: public class LocalRequestOnlyAttribute : AuthorizeAttribute { protected override bool AuthorizeCore(HttpC

我正在构建一个mvc应用程序,我正在制作一个api控制器,以允许来自一些前端页面的ajax请求。我想限制api控制器的操作,只允许来自我的服务器的请求(这样人们就不能从自己的站点调用我的api)

在进行了一些搜索之后,我找到了许多建议自定义授权属性的解决方案,我制作了:

public class LocalRequestOnlyAttribute : AuthorizeAttribute
    {
     protected override bool AuthorizeCore(HttpContextBase context)
            {
                return context.Request.IsLocal;
            }
}
然后用
[LocalRequestOnly]

它在localhost上运行良好,但在我的aws服务器上,它不工作,ajax请求作为错误返回

编辑-详细信息:

我正在使用具有相对路径的主机名。因此,我的ajax调用url是“/api/getdata”。 我没有设置任何ajax请求头。
我返回的错误是请求的资源上不存在“Access Control Allow Origin”头。

我不知道如何解决此问题,但您的解决方案不起作用,因为IsLocal没有达到您的预期效果。以下是它的文档:


IsLocal检查客户端和服务器是否在同一台计算机上。所以,如果你在亚马逊服务器上浏览chrome浏览器,这就行了。您希望做的是防止跨源请求。

您不需要做任何事情。默认情况下,Web API只允许来自同一域的请求,不支持CORS。

您无法阻止它,因为Http是无状态的,检查请求是ajax还是来自您的服务器或站点的唯一方法是使用Http头,但这些头不可信,因为它们可以通过服务器端编码手动设置


但是,禁用CORS并检查这些Http头(如Referer(包含发出ajax请求的网页地址)、User Agent和X-Requested-With(对于ajax请求设置为XMLHttpRequest),可能会使操作变得困难。

您有更多信息吗?您是使用ip还是主机名进行连接?AJAX请求头是什么样子的?返回的错误是什么?详细信息added@blubberbo,我对邮递员不太清楚,以前从未用过。您可以简单地使用jquery创建一个简单的html页面,尝试使用jquery.ajax在该页面内调用web api。我相信您无法访问该api。