Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xamarin iOS的NSURLSession CreateUploadTask失败_Ios_Asp.net Web Api_Xamarin.ios_Xamarin - Fatal编程技术网

xamarin iOS的NSURLSession CreateUploadTask失败

xamarin iOS的NSURLSession CreateUploadTask失败,ios,asp.net-web-api,xamarin.ios,xamarin,Ios,Asp.net Web Api,Xamarin.ios,Xamarin,我正在尝试使用NSURLSession将对象上载到我的WebAPI,以便在后台执行此操作。我的Web API是可操作的-我的问题是客户端代码访问CreateUploadTask()方法,然后抛出异常。这是一个空异常,输出窗口中也没有任何内容。因此,根本没有任何迹象表明问题出在哪里。我用来启动的代码在这里 private NSUrlSessionConfiguration configuration = NSUrlSessionConfiguration.BackgroundSession

我正在尝试使用NSURLSession将对象上载到我的WebAPI,以便在后台执行此操作。我的Web API是可操作的-我的问题是客户端代码访问CreateUploadTask()方法,然后抛出异常。这是一个空异常,输出窗口中也没有任何内容。因此,根本没有任何迹象表明问题出在哪里。我用来启动的代码在这里

    private NSUrlSessionConfiguration configuration = NSUrlSessionConfiguration.BackgroundSessionConfiguration ("com.SimpleBackgroundTransfer.BackgroundSession");
    private NSUrlSession session;


public void SendBackgroundMessage(AppMessage m)
{
    session = NSUrlSession.FromConfiguration(configuration, new UploadDelegate(), new NSOperationQueue());

    NSUrl uploadHandleUrl = NSUrl.FromString(Constants.ApiUrl + "api/AppMessage/Send");
    NSMutableUrlRequest request = new NSMutableUrlRequest(uploadHandleUrl);
    request.HttpMethod = "POST";
    request["Content-Type"] = "application/json";

    var keys = new object[] { "Authorization" };
    var objects = new object[] { _accessToken };
    var dictionary = NSDictionary.FromObjectsAndKeys(objects, keys);
    request.Headers = dictionary;


    string json = JsonConvert.SerializeObject(m);
    var body = NSData.FromString(json);
    var uploadTask = session.CreateUploadTask(request, body);
    uploadTask.Resume();
}
我怀疑这与我序列化为json并创建NSData对象的方式有关。任何关于这一点的建议都将非常感谢


编辑:好的,如果我删除body参数,上传任务将创建一个良好的。这与我编写json的方式有关。

您可以将XS调试器配置为在所有异常情况下停止。引自:

使用“运行->新建断点”菜单或“新建断点”按钮 在断点键盘中,将新断点设置为“当 “引发异常”


一旦到达该异常断点,
NullReferenceException
,与大多数.NET异常一样,应该为您提供额外的详细信息,包括堆栈跟踪,其中应该包括发生的行号

这是通过先将json字符串保存到磁盘来解决的。然后在上传任务中使用它,如下所示

        string json = JsonConvert.SerializeObject(m);

        var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        var filename = Path.Combine(documents, m.AppMessageId.ToString());
        File.WriteAllText(filename, json);

        var uploadTask = session.CreateUploadTask(request, NSUrl.FromFilename(filename));

对不起,我没有解释清楚。它不是NullReferenceException。。它只是空的。它在try-catch中,在catch中异常变量为null:-O。除了在iOS中使用xamarin外,我在任何地方都没有看到过这种情况。