iis Web API < 是无效的值开头,路径:$|行号:0| BytePositionInLine:0

cyej8jka  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(104)

做内部网站,并部署了一个ASP.NET Core Web API到IIS10。
当启用匿名身份验证并且禁用其他所有功能时,将到达API调用。这是IIS >身份验证中的默认设置。
但是,如果启用了Windows身份验证,并且禁用了其他所有功能:


的数据
我得到错误:
第一个月
不知道在哪里寻找问题,或者为什么甚至有一个问题。下面是网站的web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\webapi.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

字符串

最新

这是我希望调用的Web API端点:

[HttpPost("SaveProduct")]
        public async Task<Product> SaveProduct([FromBody] Product myProduct)
        {
            // some code....
            return myProduct;
        }


这是我的Blazor应用程序中的调用代码:

public async Task SaveProductAync(Product myProduct)
{
    try
    {
        ......
        HttpResponseMessage resp = await new HttpClient().PostAsJsonAsync<Product>("Product/SaveProduct", myProduct, new JsonSerializerOptions(JsonSerializerDefaults.Web));
        savedProduct = await resp.Content.ReadFromJsonAsync<Product>();
        ......
    }
}


我有一个日志记录类,并添加了一行日志resp.StatusCode,在阅读内容之前。代码为 * 未授权 *。所以这似乎是问题所在,但在错误中这对我来说并不明显。
当我创建web API项目时,我在创建项目时选择了 No authentication。我想通过IIS完全控制身份验证。
我想这是不可能的吧?我是否也必须在web API项目中添加身份验证代码?

lb3vh1jj

lb3vh1jj1#

这个问题的根本原因是我们没有在Web应用程序中启用Windows身份验证,这可能会导致一些错误页面,如401。
我们可以通过使用fiddler或wireshark捕获http请求并检查响应的内容来验证它。

谢谢你的努力。
像下面这样更改代码,因为返回的数据是XML而不是JSON。您可以添加httpClient.DefaultRequestHeaders.Add("Accept", "application/json");

@inject HttpClient httpClient

    public async Task SaveProductAync()
    {
        try
        {
            ...
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
            HttpResponseMessage resp = await new HttpClient().PostAsJsonAsync<Product>("Product/SaveProduct", myProduct, new JsonSerializerOptions(JsonSerializerDefaults.Web));
            savedProduct = await resp.Content.ReadFromJsonAsync<Product>();
            ...
        }
    }

字符串

相关问题