ASP.NET Web Service返回带有参数的IndexOutOfRangeException错误

3

我有以下的网络服务:

[ScriptService]
public class Handler : WebService {

    [WebMethod]
    public void method1() {

        string json = "{ \"success\": true }";

        System.Web.HttpContext.Current.Response.Write(json);

    }

    [WebMethod]
    public object method2(Dictionary<string, object> d) {

        Dictionary<string, object> response = new Dictionary<string, object>();

        response.Add("success", true);

        return response;

    }

}

第一种方法接受传统的HTML表单提交,响应时将JSON字符串写入页面。第二种方法接受通过AJAX发布的JSON值,并返回一个序列化对象。
这两种方法单独使用时都很好用,但当它们在同一个Web服务中组合在一起时,调用method1时会出现以下错误:
System.IndexOutOfRangeException: Index was outside the bounds of the array.

当我从method2中移除参数时,它们可以正常工作。
有人能否建议为什么会发生这种情况?
编辑:
问题来自于method2的参数类型。如果我将其更改为字符串或简单数据类型,则可以正常工作。正如Joel所建议的那样,这可能是因为字典无法序列化。这似乎不影响我通过ajax发送的请求,并且只会破坏直接表单提交到此处理程序的请求。因此,我的解决方法是将表单提交处理程序放在一个单独的文件中。虽然不理想,但适用于我的应用程序。

2
https://dev59.com/PHVD5IYBdhLWcg3wKYP- - Jahan Zinedine
1个回答

4

谢谢回复,我一直以这种方式返回json,只要字典中的对象可序列化,它似乎都能正常工作。我不确定这是否是上述问题的原因。 - Mark Clancy
@CL4NCY - 作为测试,将返回类型和对象更改为List<string, string>,看看是否会出现错误。如果不是字典,你应该会得到相同的错误。 - Joel Etherton
返回类型似乎不影响错误,但是method2的参数确实会影响。如果我将它们删除或将它们更改为“string d”而不是“Dictionary<string, object> d”,那么它就可以工作了。我不明白method2如何影响调用method1。 - Mark Clancy

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