NSURLSession创建Xamarin iOS上传任务失败

4

我正在尝试使用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的方式有关。
2个回答

3
这个问题可以通过先将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));

0

您可以配置XS调试器以停止所有异常。引用自论坛

使用“运行->新断点”菜单或断点面板中的“新断点”按钮,并将新断点设置为在“抛出异常时”中断。

一旦它命中异常断点,像大多数.NET异常一样,NullReferenceException应该会给您额外的细节,包括堆栈跟踪,其中应该包括发生异常的行号。


抱歉我没有完全解释清楚。这不是NullReferenceException..只是'null'。它在try catch中,当在catch中时,异常变量为null :-O。除了在使用Xamarin for iOS时,我没有看到过这种情况。 - creatiive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接