首页 > 解决方案 > 从桌面问题调用 asp.net WebMethod

问题描述

我在旧的 asp.net 应用程序中有一个 webmethod。KboAjaxBase.asmx 模块位于 wwwroot 中。当我从控制台应用程序调用该方法时,它返回 405。我所有的其他 webmethods 都在 wesite 中调用(来自 js)并且运行良好。这是唯一的桌面调用。谢谢

asmx文件中的webmethod是:

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public partial class KboAjaxBase : System.Web.Services.WebService
{    
    [WebMethod]
    public AjaxCallParams VerifyStoreImagesOnServer(AjaxCallParams ajaxCallParams)
    {
        int imagesCreated = -1; 
        AjaxCallParams returnParams = new AjaxCallParams(ajaxCallParams.Request, "",null);
        string isbn = ajaxCallParams.Data.ToString();
        StaticState.SetIsWebApi();
        using (var db = new DataAccess())
        {
            imagesCreated = ImageFuncsServer.VerifyStoreImagesOnServer(isbn);
        }
        returnParams.Data = imagesCreated.ToString();

        return returnParams;
    }    
}

调用例程(在控制台应用程序中)是:

public static int VerifyImages(string isbn)
{
    var count = -5;
    var ajaxCallParams = new KBO.StoreLib.AjaxCallParams( );
    
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(Constants.KBOApiUrl);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.PutAsJsonAsync("VerifyStoreImagesOnServer", ajaxCallParams).GetAwaiter().GetResult();
        if (response.IsSuccessStatusCode)
        {
            // Get the URI of the created resource.  
            var content = response.Content.ReadAsStringAsync().ToString();
            ajaxCallParams = (KBO.StoreLib.AjaxCallParams)JsonConvert.DeserializeObject(content);
            count = (int)ajaxCallParams.Data;
        }
    }              
    return count;
}

这是工作的 js 函数和一个典型的调用:

function kbo_JsonQuery(url, method, ajaxCallParams, allowWindowClose) {
    if (_kboAjaxIsActive) return; // prevent double clicks - racing
    _kboAjaxIsActive = true;
    var jsonString = "{ 'ajaxCallParams': " + JSON.stringify(ajaxCallParams) + " }";
    var myUrl = url + method;
    //kbo_showModalOverlay();
    $.ajax({
        type: "POST",
        url: myUrl,
        data: jsonString,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: allowWindowClose, //blocks window close
        success: kbo_Success,
        error: kbo_Error
    });
}

典型调用:

function kboSaveSelectorStatus() {
    var kboSelectorCallParams = new KboSelectorCallParams(availableBooks, kboBuildStatus(), _kboSaveSelectedBooks);
    var ajaxCallParams = new KboAjaxCallParams(_kboSaveSelectedBooks, "");
    ajaxCallParams.SelectorCallParams = kboSelectorCallParams;
    kbo_JsonQuery(_kboAjaxBaseUrl, _kboSaveSelectedBooks, ajaxCallParams, _kboAllowWindowClose);
    selectionIsDirty = false;
}

标签: asp.net-web-apiwebclient

解决方案


推荐阅读