当没有提供Content-Type''application / Json“时,C#[WebMethod]没有命中

时间:2017-05-01 14:59:45

标签: javascript c# angularjs json iframe

我创建了一个C#WebMethod

$http({
            url: 'default.aspx/GetPageHtml?file=' + JSON.stringify(selectedFile) + '&page=' + itemNumber,
            method: "GET",
            headers: { 'Content-Type': 'application/json' },
            data:''
        }).then(function successCallback(response) {
            return response.d;
        }, function errorCallback(response) {

        });

我可以调用它,当我添加标题Content-Type:'application / Json'时,使用Ajax,angular,Postman可以正常工作。这是示例HTTP请求,它正常工作。

<iframe ng-src="default.aspx/GetPageHtml?file=candy.pdf&page=1" style="height: 150px;"></iframe>

但是当我调用与iframe ng-src相同的方法时,它无效。

foreach ($account in Get-AzureRMAutomationAccount){
Get-AzureRmAutomationRunbook -ResourceGroupName $account.ResourceGroupName -AutomationAccountName $account.AutomationAccountName
}

我通过Google Chrome的开发者工具检查了这个Http调用,发现Content-Type在那里是'text / html',这就是为什么它没有打到我的WebMethod。请看这个截图。 Iframe ng-src

我在谷歌和Stackoverflow上进行了很多调查,但我找不到我需要提供Content-Type的原因:'application / json'来调用我的WebMethod

1 个答案:

答案 0 :(得分:0)

我进一步调查了我的问题,并试图找到其他方法,我想出了一个解决方案。我创建了一个名为GetDocumentHtml.aspx的新WebForm,并在Page_Load方法中进行操作,我之前在GetPageHtml WebMethod进行了操作。

现在在iframe ng-src我正在提供此网址

/GetDocumentHtml.aspx?file=calibre.docx&page=1

而不是

default.aspx/GetPageHtml?file=candy.pdf&page=1

在Page_Load方法中,我使用以下代码获取网址参数

var file = GetValueFromQueryString("file");
var page =Convert.ToInt32(GetValueFromQueryString("page"));

GetValueFromQueryString方法

 private String GetValueFromQueryString(String value)
    {
        try
        {
            return Request.QueryString[value].ToString();

        }
        catch (System.Exception exp)
        {
            return String.Empty;
        }
    }

我希望这些信息对某人有所帮助。谢谢。