servicestack 用于内部Web应用程序的CORS和ServiceStack后端,servicestack,cors,servicestack,Cors" /> servicestack 用于内部Web应用程序的CORS和ServiceStack后端,servicestack,cors,servicestack,Cors" />

servicestack 用于内部Web应用程序的CORS和ServiceStack后端

servicestack 用于内部Web应用程序的CORS和ServiceStack后端,servicestack,cors,servicestack,Cors,全部, 我们正在尝试使用ServiceStack作为我们所有内部和前向站点的后端API,但我们遇到了问题。以下是问题 地点 1) 我们需要一个自定义请求头来处理身份验证。我们的应用程序向API服务器发送一个应用程序ID来验证该应用程序,因此JSONP已退出 2) 由于JSONP已经过时,我们需要支持选项。我在Chrome和IE上做了这个,但IE正在抛出那个该死的安全弹出窗口。我们可以通过内部用户解决这个问题,但不能通过外部用户解决 如果有人对如何做到这一点有任何建议,我很乐意听取他们的意见。我希

全部,

我们正在尝试使用ServiceStack作为我们所有内部和前向站点的后端API,但我们遇到了问题。以下是问题

地点

1) 我们需要一个自定义请求头来处理身份验证。我们的应用程序向API服务器发送一个应用程序ID来验证该应用程序,因此JSONP已退出

2) 由于JSONP已经过时,我们需要支持选项。我在Chrome和IE上做了这个,但IE正在抛出那个该死的安全弹出窗口。我们可以通过内部用户解决这个问题,但不能通过外部用户解决


如果有人对如何做到这一点有任何建议,我很乐意听取他们的意见。我希望地狱的CORS规范处理子域。如果它真的这样做了,这将很简单……

我对使用CORS还不熟悉,但我确实使用了选项

public class YourService : Service
{
    ... 
    /// <summary>
    /// CORS support
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    public object Options(YourRequestDto request)
    {
        // return HTTP Code and Location: header for the new resource
        // 204 No Content; The request was processed successfully, but no response body is needed.
        return new HttpResult()
        {
            StatusCode = HttpStatusCode.NoContent,
            Headers = {
                { "Access-Control-Allow-Origin", "*" },
                { "Access-Control-Allow-Methods", "GET, OPTIONS" } ,
                { "Access-Control-Allow-Headers", "Content-Type" }, 
            }
        };
    }
}
公共类服务:服务
{
... 
/// 
///CORS支持
/// 
/// 
/// 
公共对象选项(您的请求到请求)
{
//返回新资源的HTTP代码和位置:标头
//204无内容;请求已成功处理,但不需要响应正文。
返回新的HttpResult()
{
StatusCode=HttpStatusCode.NoContent,
标题={
{“访问控制允许来源”,“*”},
{“访问控制允许方法”、“获取、选项”},
{“访问控制允许标头”,“内容类型”},
}
};
}
}
我的推荐信是:

web浏览器应发出选项请求,并在此处进行处理。然后在完成任务后进行GET、POST等

本例允许所有域(*),但您可以添加自己的逻辑以适应

仅供参考-在IE 10之前,我认为IE没有完全的CORS支持

public class YourService : Service
{
    ... 
    /// <summary>
    /// CORS support
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    public object Options(YourRequestDto request)
    {
        // return HTTP Code and Location: header for the new resource
        // 204 No Content; The request was processed successfully, but no response body is needed.
        return new HttpResult()
        {
            StatusCode = HttpStatusCode.NoContent,
            Headers = {
                { "Access-Control-Allow-Origin", "*" },
                { "Access-Control-Allow-Methods", "GET, OPTIONS" } ,
                { "Access-Control-Allow-Headers", "Content-Type" }, 
            }
        };
    }
}