发布到asp.netAPI

v6ylcynt  于 2023-04-13  发布在  .NET
关注(0)|答案(1)|浏览(113)

我试图添加一个API到现有的Web窗体站点。A)对不起,一切都是用VB写的,B)我有点新的API的,所以真的不知道我在做什么。
我的例子基于微软的教程:https://learn.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/using-web-api-with-aspnet-web-forms
我在Controllers文件夹中创建了一个默认控制器(名为vSend.vb),并在global.asax中添加了一个路由

Namespace Controllers
Public Class vSend
    Inherits ApiController

    ' GET: api/vSend
    Public Function GetValues() As IEnumerable(Of String)
        Return New String() {"value1", "value2"}
    End Function

    ' GET: api/vSend/5
    Public Function GetValue(ByVal id As Integer) As String
        Return "value"
    End Function

    ' POST: api/vSend
    Public Sub PostValue(<FromBody()> ByVal value As String)

    End Sub

    ' PUT: api/vSend/5
    Public Sub PutValue(ByVal id As Integer, <FromBody()> ByVal value As String)

    End Sub

    ' DELETE: api/vSend/5
    Public Sub DeleteValue(ByVal id As Integer)

    End Sub
End Class  End Namespace

 Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    RouteTable.Routes.MapHttpRoute(name:="DefaultApi", routeTemplate:="api/{controller}/{id}", defaults:=New With {Key .id = System.Web.Http.RouteParameter.[Optional]})
End Sub

我使用PostMan尝试发布一个简单的JSON数据包并获得响应:“消息”:“找不到与请求URI 'http://localhost:91/api/vSend'匹配的HTTP资源。",“MessageDetail”:“找不到与请求URI 'http://localhost:91/api/vSend'匹配的提供控制器名称的路由”
Image from Postman
任何帮助,让我指出正确的方向将不胜感激!

lyr7nygr

lyr7nygr1#

对于任何web方法(API),你必须设置/tell/tag/setup代码作为web方法。
所以,假设你已经安装了jQuery(我们不都是吗???)。
所以,在给定的网页上?(代替创建一个单独的asmx页面?)。
然后在代码后面你需要:

Imports System.Web.Services

然后,对于该页面中的任何方法,您必须将该方法标记为“webmethod”。
由于没有页面发布,这意味着web方法必须是后面代码中的“静态”方法。
因此,让我们创建一个web方法,它接受firstname和lastname,并返回一个全名。
所以,后面的代码是这样的:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

<WebMethod>
Public Shared Function MyFullName(strFirstName As String, strLastName As String) As String

    Dim sResult As String =
        strFirstName & " " & strLastName

    Return sResult

End Function

现在,在客户端(标记),我们有这个:

<div style="padding:35px">

    <div style="float:left">
        Enter First Name:
        <asp:TextBox ID="txtFirst" runat="server" ClientIDMode="Static">
        </asp:TextBox>
    </div>
    <div style="float:left;margin-left:15px">
        Enter First Name:
        <asp:TextBox ID="txtLast" runat="server" ClientIDMode="Static">
        </asp:TextBox>
    </div>

    <div style="float:left;margin-left:15px">
        Result:
        <asp:TextBox ID="txtFirstLast" runat="server" ClientIDMode="Static">
        </asp:TextBox>
    </div>

    <div style="clear:both"></div>
    <br />
    <asp:Button ID="Button1" runat="server" Text="ajax (web method call)"                
        OnClientClick="testwebcall();return false"                
    />

    </div>

<script>

    function testwebcall() {
        var tFirstName = $('#txtFirst').val()
        var tLastName = $('#txtLast').val()
        var tFirstLast = $('#txtFirstLast')

        var URL = "TestAjaxCall.aspx/MyFullName" 

        $.ajax({
            type: "POST",
            url: URL,
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({strFirstName : tFirstName, strLastName : tLastName}),
            success: function (mydata) {
                // ok, have return value, place in 
                tFirstLast.val(mydata.d)
            }
        });
    }

</script>

所以,现在当我们运行时,我们得到/看到这个:

相关问题