asp.net-web-api - 从桌面问题调用 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;
}
解决方案
推荐阅读
- java - 如何迭代 ColorStateList?
- arrays - 似乎无法将多个数组行与 c 语言中的多个 int 变量相加
- atom-editor - 无法在 Atom 编辑器中保存设置
- c - Arduino Uno:当第二次按下时,While-loop 无法“重新启动”使用按钮重置计时器?
- c# - VSCode 在单独的文件中找不到我的基本类
- python - 如何在 Visual Studio Code 中查找/执行 Python 交互模式?
- react-native - onEndReached 在渲染时被多次调用
- slack-api - 从 Slack API 中的“reaction_added”事件中获取“thread_ts”
- plotly - 在散点图中使用自定义字体图标
- paypal - 将 Paypal 支付按钮嵌入社区网站