当前位置: 首页 > 知识库问答 >
问题:

Angular POST从ASP返回500错误。NET Core Web API

鲜于意
2023-03-14

我正在将数据从Angular client发布到ASP。NET核心Web API。如果数据具有拉丁欧字符,如ć,č,š,则返回500个内部错误,否则返回201。

这是数据类:

export class FinalFormData {
    name: string;
    url: string;
    dateCreated: Date;
    tags: any[];
}

POST功能处理数据的功能:

this.data.postData(this.finalData)
    .subscribe(data => {
        this.finalData = data;
        this.router.navigate(["/"]);
    }, err => console.log(err));

过帐数据的功能:

public postData(data: FinalFormData): Observable<FinalFormData> {
    return this.http.post<FinalFormData>("/api/links", data, {
        headers: new HttpHeaders({
            'Content-Type' : 'application/json; charset=utf-8'
        })
    });
}

网页API

    [HttpPost("")]
    public async Task<IActionResult> Post([FromBody]FinalFormViewModel theLink)
    {
        if (ModelState.IsValid)
        {
            var newLink = new Links
            {
                UserName = User.Identity.Name,
                Url = theLink.Url,
                Name = theLink.Name,
                DateCreated = DateTime.UtcNow
            };
            //newLink.Name = _repository.GetTitle(newLink.Url);

            _repository.AddLink(newLink);
            _context.SaveChanges();
            Links link = _repository.GetLinkByName(newLink.Name);

            foreach (var tag in theLink.Tags)
            {
                var newTag = new Tags
                {
                    Name = tag
                };
                _repository.AddTag(link, newTag, newLink.UserName);
            }

            // Returning data

            var data = new FinalFormViewModel()
            {
                Name = newLink.Name,
                Url = newLink.Url,
                DateCreated = newLink.DateCreated,
                Tags = newLink.Tags.Select(t => t.Name).ToList()
            };
            if (await _repository.SaveChangesAsync())
            {
                return Created($"api/links/{theLink.Name}", data);
            }             
        }
        return BadRequest("Failed to save the link");
    }

在Web API中调试时,在每种情况下,代码到达返回创建的($API/links/{theLink.Name}),数据) 这意味着它返回201状态。

但如果像č,ć,ž这样的字符是url字符串的一部分,即使它返回201,在浏览器中,我在控制台中得到错误消息:

"Http failure response for http://localhost:54105/api/links: 500 Internal Server Error"

在此之后,订阅Observable将不会达到成功块。在其他情况下,如果没有这些特殊字符,它可以正常工作。

网络响应:

编辑

实际上,我现在发现了服务器错误:

InvalidOperationException: Invalid non-ASCII or control character in header: 0x0161

Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders.ThrowInvalidHeaderCharacter(char ch)

共有2个答案

钱锦
2023-03-14

jdweng是对的,UTF-8不包括你提到的字符:http://www.utf8-chartable.de/

另一方面,ISO-8859-2包括它们:https://www.terena.org/activities/multiling/ml-docs/iso-8859.html

正如这里所说:https://stackoverflow.com/a/43164489/4770754

发送请求时包括RequestOptions参数。

在Request estOptionsArgs中指定字段响应类型:响应内容类型。(响应内容类型。ArrayBuffer或响应内容类型。Blob)

使用TextDecoder或类似的工具来解码结果。

见文件:

https://angular.io/api/http/Http

https://angular.io/api/http/RequestOptions

https://angular.io/api/http/ResponseContentType

更新:

或者你可以按照你说的去做,而不是theLink. Name使用theLink. Url,它不包含非ASCII字符。

晁绍辉
2023-03-14

Angular一次只能支持一种语言,所以如果你想从英语切换到拉丁语,你需要重新加载应用程序上下文。

这里有更多细节

 类似资料:
  • 我部署基本Laravel项目到服务器。当我点击我的域名,它返回默认的欢迎视图。当我把简单的道路(见下文)添加到代码中,并尝试在浏览器中输入该路线时,它会返回500个内部错误。除"/"根路由外,所有路由都返回500错误。 文件夹结构: Laravel文件位于Laravel目录中,但来自公共目录的文件位于api目录中。 .api目录中的htaccess文件: 存储目录和其中的所有内容对任何人都是可写、

  • 问题内容: 我正在通过Ajax将幻灯片(Jquery Ui Slider)中的每个滑块值传递到我的Controller。 Slider + Ajax看起来像这样: 因此,我确实有这样的想法: 我的路线如下所示: 在我的Controller方法中,我这样调用它: Log :: info($ sliderValue)告诉我,我确实在每张幻灯片上都获得了正确的滑块值。 当我尝试返回到编辑视图时,在控制台

  • 回到RC1,我会这样做: 在RC2中,不再有,并且没有任何东西可以让我返回500类型的IActionResult。 我现在问的方法完全不同了吗?我们是否不再尝试捕获代码?我们是否只是让框架将一个泛型500异常抛回API调用者?对于开发,如何查看确切的异常堆栈?

  • 问题内容: 我有一个返回内部服务器错误(500)的php应用程序时出现问题,但错误日志中未显示任何内容。 现在,我知道我要运行的内容有错误,我知道缺少某些文件,但没有丢失,但是应该在apache错误日志中显示某些内容(否则,我应该如何确切知道丢失的内容)。 我创建了一个测试脚本,该脚本在相同的vhost配置下出错,并且这些错误显示得很好,因此一切似乎都已正确配置到php / apache。是否有某

  • 我使用RESTAssured练习web服务。在post请求中,它返回500服务器错误,其中我使用邮差发送请求,没有错误。谁能帮我调试一下这个错误吗?请给点意见。任何帮助都是感激的?提前道谢。 错误消息的状态代码应为<200>,但为<500>。 堆栈跟踪:

  • My/etc/php-fpm.d/www.conf 我的nginx/etc/nginx/conf.d/default.conf