首页 新闻 会员 周边 捐助

Cors跨域问题

1
悬赏园豆:80 [已解决问题] 解决于 2016-07-05 11:13

Cors跨域目前遇到问题,1.做put修改,遇到复杂请求难题,第一次预检应该是通过,就是如下图片,状态码200,有请求头信息,有响应头信息,2.第二次请求,是真实做put的,然后是报服务器内部错误,错误状态码,500,对应第二张图。

学习态度要端正的主页 学习态度要端正 | 初学一级 | 园豆:55
提问于:2016-06-30 15:46
< >
分享
最佳答案
0

500是server side錯誤,查查你的API是否有問題,server錯誤回傳的header不包含Access-Control-Allow-Origin header是正常的

收获园豆:65
RosonJ | 老鸟四级 |园豆:4910 | 2016-06-30 16:22

能qq交流一下吗?

学习态度要端正 | 园豆:55 (初学一级) | 2016-06-30 16:27

你是昨天回答过问题吧! 

学习态度要端正 | 园豆:55 (初学一级) | 2016-06-30 16:28

@学习态度要端正: 

喔~原來還有後續阿,sorry, 沒有QQ..

RosonJ | 园豆:4910 (老鸟四级) | 2016-06-30 16:35

@RosonJ: 帮人帮到底,送佛送到西。看怎么能好交流一些呢。拜托帮帮忙啦。您是做过CORS跨域吧?

学习态度要端正 | 园豆:55 (初学一级) | 2016-06-30 16:38

@学习态度要端正: 

30分鐘前才碰過同樣問題,優先處理500的錯誤,先在同域下呼叫你的API,在response中應該可以看到進一步的錯誤訊息,或著直接debug

RosonJ | 园豆:4910 (老鸟四级) | 2016-06-30 16:40

@RosonJ:  前辈,确定修改代码没有问题。我觉得,他就是在做修改的时候,没有响应头,就报错了。

学习态度要端正 | 园豆:55 (初学一级) | 2016-07-01 09:58

@学习态度要端正: 

response裡的資訊能提供出來看一下嗎

RosonJ | 园豆:4910 (老鸟四级) | 2016-07-01 10:01

@学习态度要端正: 

学习态度要端正 | 园豆:55 (初学一级) | 2016-07-01 10:03

@RosonJ: 

学习态度要端正 | 园豆:55 (初学一级) | 2016-07-01 10:43

@学习态度要端正: 

我想你誤解我的意思了

這個頁面的上面有Headers, Preview, Response, Timing四個頁籤

我想看的是Preview跟Response的內容,你現在給我的只是標頭部分,資訊不足

RosonJ | 园豆:4910 (老鸟四级) | 2016-07-01 10:46

@RosonJ: 都是空的,并没有什么消息。

学习态度要端正 | 园豆:55 (初学一级) | 2016-07-01 10:52

@学习态度要端正: 

建議你將現行的cors設定清除,套用WebApi.Cors,情況會比較單純

RosonJ | 园豆:4910 (老鸟四级) | 2016-07-01 10:58

@RosonJ: 目前就是用的web api Cors.只在每个action头上标注允许跨域。然后在webapi.config中做全局配置开启CORS,就是这样的。

学习态度要端正 | 园豆:55 (初学一级) | 2016-07-01 11:04

@学习态度要端正: 

如你的描述是不會出錯的(昨天才以相同方式實做了一個WebAPI),還是建議你debug,會回傳500必定是有原因的,最大可能還是在你的code

RosonJ | 园豆:4910 (老鸟四级) | 2016-07-01 11:10

@RosonJ: 大神, 难道真不是跨域那块出的问题吗、? 代码我都调试了。肯定没错的。

学习态度要端正 | 园豆:55 (初学一级) | 2016-07-04 16:09

@学习态度要端正: 

我的意思是,錯誤一定發生server side,也有可能是cors的code出錯,不過套用cors就那兩三行code,可能性相對小,總而言之,找出500的來源就對了

RosonJ | 园豆:4910 (老鸟四级) | 2016-07-04 17:17

@RosonJ: 终于解决了。我配置CORS多了一些东西,有重复性的东西。目前都可以跨域了。谢谢啦。

学习态度要端正 | 园豆:55 (初学一级) | 2016-07-05 11:11
其他回答(1)
0

运行程序debug以下就行了,后台程序报错,因为未对抛出的异常做任何处理,为了保护这些异常信息不被前端看到,你看到的就都会是这种500的错误,而且因为异常抛出的不会自动添加跨域的头,所以也会报跨域头的错误。所以建议就是:

1、debug看抛出了什么异常,问题就能解决了;

2、重写ExceptionFilterAttribute的OnException方法,对不同的exception返回不同的异常信息,比如文件不存在可以返回一个状态码为404的异常:

public override void OnException(ExceptionContext context)
{
    var exception = context.Exception;
    if (exception == null)// should never happen
    {
        return;
    }
    //todo: log the exception.
    context.Result = new ObjectResult(new { Message =         exception.Message });
    if (exception is KeyNotFoundException)
    {
        context.HttpContext.Response.StatusCode = 404;//Not Found
    }
    else if (exception is ArgumentException || exception is ArgumentNullException)
    {
        context.HttpContext.Response.StatusCode = 400;//Bad Request
    }
    else if (exception is NotImplementedException)
    {
        context.HttpContext.Response.StatusCode = 501; //Not Implemented
        context.Result = new ObjectResult(new { Message = "Not implemented." });
    }
    else if (exception is InvalidOperationException)
    {
        context.HttpContext.Response.StatusCode = 500;
    }
    else if (exception is MemberAccessException)
    {
        context.HttpContext.Response.StatusCode = 401;//Unauthorized
    }
    else// Other exception types you want to handle ... 
    {
context.HttpContext.Response.StatusCode = 500;
context.Result = new ObjectResult(new { Message = "An error has occured." });//Exceptions whose message should not be shown to users.
}
}                                

 

 

收获园豆:15
Buthcer | 园豆:238 (菜鸟二级) | 2016-07-01 14:29

调试的时候可以添加到进程调试就行了

支持(0) 反对(0) Buthcer | 园豆:238 (菜鸟二级) | 2016-07-01 14:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册