我正在进行CORS POST请求并将Content-Type标头设置为json.这会触发Preflight OPTIONS请求触发(这很好并且预期)
此OPTIONS请求以200 OK响应,但这不是来自我的WebAPI应用程序.
我有一个自定义的消息处理程序,它永远不会受到影响,因此在看到ASP.NET之前,IIS会响应请求.
我找到了几个关于这个主题的帖子,他们说了以下内容
确保卸载/删除/禁用WebDav - 完成
确保删除/更改OPTIONSVerbHandler以使用aspnet_isapi.dll - 同时尝试
确保extensionlessURLHandler包含OPTIONS动词 - DONE
但是,我的选项请求仍然被劫持.我的意思是,IIS以200 OK响应,但在响应中不包括Access-Control-Allow-Origin标头.它不包括此标头,因为它永远不会到我设置此标头的WebAPI CORS代码.
我能找到的两个最好的帖子听起来像是我的问题
在这里: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,你是我唯一的希望.
好吧,我必须忽略一些非常简单的东西,但我迷失了.
鉴于这种
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,它会在运行时为你做所有分析.我们给你选择"快速和精确"或"慢和松弛",合理的默认值是前者.如果你想要后者然后调用方法...."
我正在构建一个跨平台的移动应用程序(使用Xamarian工具,MonoTouch/MonoDroid).我正在尝试通过身份验证工作流程,并遇到了绊脚石.我已经搜遍了一个明确的答案,但还没有找到它.
以下是我当前设置的概述.
我有一个内置在nodejs的网站.我使用passport.js在网站上进行oAuth登录.这很好用,用户可以使用Twitter或Facebook登录我的网站.
现在我想将这个相同的登录功能扩展到我的移动客户端.
我看到2个选项
将app id和app secret嵌入移动客户端,并通过移动应用程序直接向FB或Twitter发出oAuth调用
代理oAuth通过我现有的nodejs Web服务器调用(保留服务器上的密钥)
选项2似乎是首选方式(因为它避免了在移动应用程序中"运送"秘密).
我的代理方法主要是工作.
http://mysever/auth/twitter这是我的问题:
这是困扰我的最后一步.在我的服务器上完成握手后,我在服务器上获得了所需的用户信息,并需要将其发送回移动客户端应用程序
我无法弄清楚WebView控件中的任何方式来获取响应对象并获取cookie或标头值(例如)(对于Android和iOS来说这似乎是正确的).我不认为它是特定于平台的.我想我正试图做一些移动平台上的WebView小部件不支持的东西.这让我觉得我错过了一些明显的东西.
我唯一想到的是让我的网络服务器将移动客户端浏览器"重定向"到在查询字符串中包含用户信息的虚假URL.像myapp:// info?userid = 1234之类的东西
然后在移动应用程序中,我可以劫持URL加载并获取此URL并获取我需要的数据.然后,我可以存储此userinfo,关闭WebView控件并转到我的移动应用程序中的本机屏幕,并在任何后续REST调用中将userinfo用户命名为我的nodejs服务器,以识别用户.
由于多种原因,这是大规模的kludgy.其中最大的一点是,网址是通过未加密的网络发送的,并且所有数据都是纯文本的.
必须有更好的方法将数据从Web服务器返回到移动客户端?
或者我做错了吗?
我是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'} …
如何在Xamarin Forms下在iOS和Android之间共享我的功能文件?在测试单个UI代码库时,我没有看到创建多个功能目录的原因?
推荐的方法是什么?
xamarin calabash xamarin.forms calabash-ios calabash-android
.net ×1
asp.net-mvc ×1
c# ×1
calabash ×1
calabash-ios ×1
cors ×1
iis ×1
jquery ×1
knockout.js ×1
node.js ×1
oauth ×1
passport.js ×1
xamarin ×1
xamarin.ios ×1