【问题标题】:getting a 403 forbidden error when calling a .NET function from jQuery AJAX从 jQuery AJAX 调用 .NET 函数时出现 403 禁止错误
【发布时间】:2014-03-05 23:45:33
【问题描述】:

我有这个 jQuery 代码,它从表单提交运行并循环以将一定数量的记录插入到 SQL 表中。代码的 ajax 部分调用名为 Helpers.vbhtml 的 webmatrix 页面中的 VB 函数

function InsertSheeter()
{
    var textDate = $('#textDate').val()
    var Workorder = $('#textWorkorder').val()
    var Material = $('#dropdownMaterial').val()
    var Shift = $('#dropdownShift').val()
    var Sheeter = $('#dropdownSheeter').val()
    var FoilNum1 = $('#textFoilNum1').val()
    var FoilNum2 = $('#textFoilNum2').val()
    var FoilNum3 = $('#textFoilNum3').val()
    var Printline = $('#dropdownPrintline').val()
    var Section = $('#dropdownSection').val()
    var Comments = $('#textComments').val()
    var Employee = $('#dropdownEmployees').val()

    var a = 0

    while (a < Section)
    {


        switch (a) 
        {
        case 0:
            blockSection = "1"
            break;
        case 1:
            blockSection = "2"
            break;
        case 2:
            blockSection = "3"
            break;
        }

    var str = {pDate: textDate, pSheeter: Sheeter, pShift: Shift, 
            pEmployee: Employee, pWorkorder: Workorder, pBlockSection: blockSection, 
                pComments: Comments, pFoilNum1: FoilNum1, pFoilNum2: FoilNum2, 
                pFoilNum3: FoilNum3, pPrintline: Printline, pMaterial: Material}
    $.ajax(
    {
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "Helpers.vbhtml/InsertSheeter",
        data: JSON.stringify(str),    
        dataType: "json",
        success: function(data)
            {
            OpenReports(Workorder, data.d)
            },
        error: function (xhr, errorType, exception) { 
                var errorMessage = exception || xhr.statusText;
                alert(errorMessage);
                }

    });


    a++;
    }


}

这是被调用的 VB.NET 函数:

我根据我对文档的理解创建了一个使用 App_Code 目录中的 vbhtml 页面的 web 服务。这是我之前在本文中引用的 vb 代码 InsertSheeter 的 sn-p。

@Imports Microsoft.VisualBasic
@Imports System
@Imports System.Web
@Imports System.Web.Services
@Imports System.Xml.Serialization

@Functions
<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> 


 <WebMethod>
Public Shared Function InsertSheeter(ByVal pDate As DateTime, ByVal pSheeter As String, ByVal pShift As String,
                            ByVal pEmployee As String, ByVal pWorkorder As String,
                            ByVal pBlockSection As String, ByVal pComments As String, ByVal pFoilNum1 As String,
                            ByVal pFoilNum2 As String, ByVal pFoilNum3 As String, ByVal pPrintline As String,
                            ByVal pMaterial As String) As String

Dim db As Database
db = Database.Open("Nomex")
Dim strQuery As String

Dim pBlockNumber As String

pBlockNumber = GetBlockNumber(pBlockSection, pWorkorder, pSheeter, pMaterial)

strQuery = "INSERT INTO dbo.NomexSheeter (SheeterDate, Sheeter, Shift, Employee, WorkOrder, BlockNumber, BlockSection, " _
            & "Comments, FoilNum_1, FoilNum_2, FoilNum_3, PrintLine, Material) " _
            & "VALUES (@0, @1, @2, @3, @4, " _
            & "@5, @6, @7, @8, @9, @10, @11, @12)"

db.Execute(strQuery, pDate, pSheeter, pShift, pEmployee, pWorkorder, pBlockNumber, pBlockSection,
                     pComments, pFoilNum1, pFoilNum2, pFoilNum3, pPrintline, pMaterial)

db.Close

Return pBlockNumber 

End Function


End Functions

调用 jQuery 函数 InsertSheeter() 后,我仍然收到 404 Forbidden 错误。我不明白我做错了什么。 Webmatrix 文档和在线帖子似乎支持这个想法。

【问题讨论】:

  • 这两个函数的名字肯定不一样。你是什​​么意思,直到你在 jQuery 中创建函数之前它一直有效?之前有效的代码是什么?
  • Javascript 客户端函数与服务器端代码无关,所以忘记命名。建议您运行 fiddler2 (telerik.com/fiddler) 并查看正在传递的流量以及它的响应。有太多其他事情可能导致不匹配(api 调用的相对路径错误等)。
  • 感谢 TrueBlueAussie 和 admanb。代码看起来基本没问题吗?我在努力做正确的事吗?我会在运行 fiddler 后报告。
  • 这就是我得到的。 说明:您请求的页面类型没有被提供,因为它已被明确禁止。     请查看下面的 URL 并确保拼写正确。

    请求的 URL:/Helpers.vbhtml/ValidateWorkorder


    版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.1022
  • 嗨 - 您是在服务器上的 iis 中运行它还是通过 VS 内置的 Web 服务器运行它?

标签: javascript jquery ajax vb.net webmatrix


【解决方案1】:

也许您的 AJAX 请求通过 HTTP,并且您为您的应用程序设置了“要求 SSL”?

【讨论】:

  • 我没有看到在站点设置中设置了 SSL。代码看起来基本正确吗?
  • 为什么有两个地方的代码?每个位置相对于网站根目录的文件名和路径是什么?
  • "我根据我对文档的理解创建"
  • 我在帖子中删除了一些重复的代码。我不是指正式的文件。我的意思是在线阅读各种帖子等。我还认为您可以创建可以从 jQuery 调用的 Web 方法。调用jquery在root,vb.net代码在App_Code
  • 有几点需要考虑,App_Code 是一个受保护的目录,因此您不能在其中请求文件。也就是说,看起来您不是在从那里请求文件,而是在请求:Helpers.vbhtml/InsertSheeter——您是如何确定此 URL 的?它看起来有点像 MVC 操作(而且我认为您不应该将 webmethods 与 MVC 一起使用)。此链接可能有助于排除故障。 asp.net/web-pages/overview/more-resources/…
【解决方案2】:

也许我错了,但我认为 Helpers 不打算由客户端调用。

ASP.NET 网页中的帮助程序是存储为 .cshtml 文件的组件,旨在通过允许其他 ASP.NET 网页使用熟悉的 object.method([args...]) 语法访问它们来提高可重用性在视图中。

关于助手的有用link

您似乎想要的是一个 asmx 格式的 Web 服务,它允许 http Post 请求以及发送和接收 JSON。

Link 创建网络服务。 Link 启用 http Post。 Link 启用 JSON。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2018-11-03
    • 2023-03-05
    • 2015-06-17
    • 1970-01-01
    • 2016-01-12
    • 2013-07-19
    • 1970-01-01
    相关资源
    最近更新 更多