小编Bra*_*ham的帖子

IIS劫持了CORS Preflight OPTIONS请求

我正在进行CORS POST请求并将Content-Type标头设置为json.这会触发Preflight OPTIONS请求触发(这很好并且预期)

此OPTIONS请求以200 OK响应,但这不是来自我的WebAPI应用程序.

我有一个自定义的消息处理程序,它永远不会受到影响,因此在看到ASP.NET之前,IIS会响应请求.

我找到了几个关于这个主题的帖子,他们说了以下内容

  1. 确保卸载/删除/禁用WebDav - 完成

  2. 确保删除/更改OPTIONSVerbHandler以使用aspnet_isapi.dll - 同时尝试

  3. 确保extensionlessURLHandler包含OPTIONS动词 - DONE

但是,我的选项请求仍然被劫持.我的意思是,IIS以200 OK响应,但在响应中不包括Access-Control-Allow-Origin标头.它不包括此标头,因为它永远不会到我设置此标头的WebAPI CORS代码.

我能找到的两个最好的帖子听起来像是我的问题

这里:JQuery坚持CORS预检和IIS幽灵响应

在这里:http://brockallen.com/2012/10/18/cors-iis-and-webdav/

我尝试在IIS中打开失败请求跟踪(FERB)并将其设置为跟踪所有200个状态代码.我没有看到选项请求被记录...不确定这是否意味着FERB不跟踪OPTIONS请求或者我是否需要更改FERB设置中的某些内容以使其跟踪OPTIONS请求,或者如果这是一条线索我的问题是什么?

这是在IIS 7.5上运行的ASP.NET WebAPI 2.0(也在IIS 8和IISExpress上测试,结果相同)无论什么浏览器(Chrome,FF和IE都以相同的方式失败)

我已经尝试了我能找到的关于这个主题的所有内容,仍然无法解决我的问题.

帮帮我StackOverflow,你是我唯一的希望.

iis asp.net-mvc cors asp.net-web-api

43
推荐指数
5
解决办法
5万
查看次数

拳击困惑.将-1转换为Int64会引发InvalidCastException

好吧,我必须忽略一些非常简单的东西,但我迷失了.

鉴于这种

object val = -1;
var foo = (Int32)(val);
var bar = (Int64)(val);
Run Code Online (Sandbox Code Playgroud)

对Int64的强制转换抛出和InvalidCastException.

我知道这与拳击的一些陌生有关,但我不明白推理.

根据我的理解,val在第一行被装箱为Int32.

然后,当我尝试转换为Int32以外的东西时抛出InvalidCastException.我想这意味着当它实际上是Int32时,我试图将Intbox作为Int64解包?

仍然看起来很奇怪 无法播放取消装箱值然后尝试执行演员表?

类似的东西(显然这是可怕的过度简化,也许盒装类型不知道所以这是不可能的?):

object val = -1;
Int32 unboxed = (Int32)(val);
var bar = (Int64)(unboxed);
Run Code Online (Sandbox Code Playgroud)

有人(读:Eric Lippert)在这背后推理我的理由.

更新:来自Eric的博客,Reed发布了一个链接,这是我正在寻找的简洁的答案

"......这将产生大量的代码,而且速度非常慢.代码当然是如此之大,以至于你想把它放在自己的方法中,只是生成一个调用它.而不是默认情况下,这样做,并始终生成缓慢,大而脆弱的代码,而我们已经决定取消装箱只能取消打包到确切的类型.如果你想调用慢速方法来完成所有这些,那么它是可用的 - 你总是可以调用Convert.ToInt32,它会在运行时为你做所有分析.我们给你选择"快速和精确"或"慢和松弛",合理的默认值是前者.如果你想要后者然后调用方法...."

.net c# language-features language-design

10
推荐指数
1
解决办法
1310
查看次数

从移动客户端做oAuth的"正确"方式

我正在构建一个跨平台的移动应用程序(使用Xamarian工具,MonoTouch/MonoDroid).我正在尝试通过身份验证工作流程,并遇到了绊脚石.我已经搜遍了一个明确的答案,但还没有找到它.

以下是我当前设置的概述.

我有一个内置在nodejs的网站.我使用passport.js在网站上进行oAuth登录.这很好用,用户可以使用Twitter或Facebook登录我的网站.

现在我想将这个相同的登录功能扩展到我的移动客户端.

我看到2个选项

  1. 将app id和app secret嵌入移动客户端,并通过移动应用程序直接向FB或Twitter发出oAuth调用

  2. 代理oAuth通过我现有的nodejs Web服务器调用(保留服务器上的密钥)

选项2似乎是首选方式(因为它避免了在移动应用程序中"运送"秘密).

我的代理方法主要是工作.

  1. 我在我的移动客户端中打开一个WebView并指向它 http://mysever/auth/twitter
  2. 这将通过我现有的passport.js代码运行,并将移动WebView重定向到Twitter登录页面.
  3. 然后,用户在设备上的Twitter网页上输入他们的信用卡.
  4. 然后Twitter调用我的oAuth回调URL(这是我的nodejs web服务器).
  5. 我的服务器和Twitter处理获得用户配置文件信息的第四次握手(据我所知,这是这种方法的关键,我的服务器和Twitter处理握手,移动客户端不必做任何事情或通过这个过程中的任何令牌)

这是我的问题:

  1. 这是困扰我的最后一步.在我的服务器上完成握手后,我在服务器上获得了所需的用户信息,并需要将其发送回移动客户端应用程序

    我无法弄清楚WebView控件中的任何方式来获取响应对象并获取cookie或标头值(例如)(对于Android和iOS来说这似乎是正确的).我不认为它是特定于平台的.我想我正试图做一些移动平台上的WebView小部件不支持的东西.这让我觉得我错过了一些明显的东西.

我唯一想到的是让我的网络服务器将移动客户端浏览器"重定向"到在查询字符串中包含用户信息的虚假URL.像myapp:// info?userid = 1234之类的东西

然后在移动应用程序中,我可以劫持URL加载并获取此URL并获取我需要的数据.然后,我可以存储此userinfo,关闭WebView控件并转到我的移动应用程序中的本机屏幕,并在任何后续REST调用中将userinfo用户命名为我的nodejs服务器,以识别用户.

由于多种原因,这是大规模的kludgy.其中最大的一点是,网址是通过未加密的网络发送的,并且所有数据都是纯文本的.

必须有更好的方法将数据从Web服务器返回到移动客户端?

或者我做错了吗?

oauth xamarin.ios node.js xamarin.android passport.js

9
推荐指数
1
解决办法
4279
查看次数

KnockoutJS postJSON方法逃脱了我的字符串为什么?

我是KockoutJS的新手,所以我可能会遗漏一些简单的东西.

我有一个textarea形式:

<form method="POST" data-bind="submit: save" id="theForm">
    <textarea name="Text" rows="10" cols="100" data-bind="value: userText" ></textarea>
    <input type="submit" value="Save" />
</form>
Run Code Online (Sandbox Code Playgroud)

我有以下Knockout代码:

<script type="text/javascript">
    var MyViewModel = {
        userText: ko.observable('@Model.UserText'),
        save: function () {
              ko.utils.postJson('@Url.Action("modify")',{userText : this.userText});
            }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

@Model.UserText文字字符串在哪里.我的ASP.NET MVC控制器方法modify定义如下:

[Authorize]
[HttpPost]
public ActionResult Modify(string userText)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是postJSON方法将转义字符串POST到我的控制器方法,我不明白为什么.我可以在提琴手中看到字符串是以字符串形式出现的userText=%22some+text%22

如果我使用普通的jQuery ajax而不是像这样使用postJson:

$.ajax(
{
url: '@Url.Action("modify")',
contentType: 'application/json',
type: 'POST',
data: ko.toJSON({userText: ko.toJS(this.userText)}),
success: function(result) {
    ko.mapping.updateFromJS(this, result);
}
});
Run Code Online (Sandbox Code Playgroud)

然后将JSON对象{'userText': 'some text'} …

jquery asp.net-mvc-3 knockout.js

4
推荐指数
1
解决办法
2774
查看次数

适用于Android和iOS的单组功能文件

如何在Xamarin Forms下在iOS和Android之间共享我的功能文件?在测试单个UI代码库时,我没有看到创建多个功能目录的原因?

推荐的方法是什么?

xamarin calabash xamarin.forms calabash-ios calabash-android

1
推荐指数
1
解决办法
540
查看次数