如何解决如何配置ASP.NET Core在驼峰情况下返回异常?
当我的应用程序引发未处理的异常时,我返回状态码500(内部服务器错误),如本例所示:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CognitoController extends Controller
{
private $key;
private $secret;
private $region;
private $version;
private $client_id;
private $client_secret;
private $user_pool_id;
private $aws;
private $client;
public function __construct()
{
$this->key = 'xxxxxx';
$this->secret = 'xxxxxx';
$this->region = 'xxxxxx';
$this->version = 'latest';
$this->client_id = 'xxxxxx';
$this->client_secret = 'xxxxxx';
$this->user_pool_id = 'xxxxxx';
$config = [
'credentials' => [
'key' => $this->key,'secret' => $this->secret,],'region' => $this->region,'version' => $this->version,'app_client_id' => $this->client_id,'app_client_secret' => $this->client_secret,'user_pool_id' => $this->user_pool_id,];
$this->aws = new \Aws\Sdk($config);
$this->client = $this->aws->createCognitoIdentityProvider();
}
public function login()
{
$username = 'guest';
$password = 'password';
$result = $this->client->adminInitiateAuth([
'AuthFlow' => 'ADMIN_NO_SRP_AUTH','AuthParameters' => [
'USERNAME' => $username,'PASSWORD' => $password,'SECRET_HASH' => $this->secretHash($username),'ClientId' => $this->client_id,'UserPoolId' => $this->user_pool_id,]);
$access_token = $result->get('AuthenticationResult')['AccessToken'];
echo '<pre>';
print_r( $result );
echo '<br/>';
print_r( $access_token );
echo '</pre>';
}
public function register()
{
$username = 'guest';
$password = 'password';
$email = 'guest@email.com';
$phone_number = '+819000000000';
$result = $this->client->signUp([
'ClientId' => $this->client_id,'Password' => $password,'SecretHash' => $this->secretHash($username),'UserAttributes' => [
[
'Name' => 'phone_number','Value' => $phone_number,[
'Name' => 'email','Value' => $email,]
],'Username' => $username
]);
echo '<pre>';
print_r( $result );
echo '</pre>';
}
public function register_confirm()
{
$username = 'guest';
$confirmationCode = '123456'; // from email verification code
$result = $this->client->confirmSignUp([
'ClientId' => $this->client_id,'Username' => $username,'ConfirmationCode' => $confirmationCode,]);
echo '<pre>';
print_r( $result );
echo '</pre>';
}
public function list()
{
$search = ['UserPoolId' => $this->user_pool_id];
$users = $this->client->listUsers($search)->toArray();
echo '<pre>';
print_r( $users );
echo '</pre>';
}
private function secretHash($username) {
$clientId = $this->client_id;
$clientSecret = $this->client_secret;
$s = hash_hmac('sha256',$username . $clientId,$clientSecret,true);
return base64_encode($s);
}
}
JSON返回为:
[HttpGet]
public ActionResult<string> Get()
{
try
{
throw new Exception("Exception return test.");
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError,ex);
}
}
但是我希望所有属性都以驼峰格式设置。
在ASP.NET Web API中,您可以实现{
"ClassName": "System.Exception","Message": "Exception return test.","Data": null,"InnerException": null,"HelpURL": null,"StackTraceString": null,"RemoteStackTraceString": null,"RemoteStackIndex": 0,"ExceptionMethod": null,"HResult": -2146233088,"Source": null,"WatsonBuckets": null
}
接口并将其替换在IContentNegotiator
中,例如explained here。使用此配置,API的每个输出都是驼峰式的,包括异常消息。
在ASP.NET Core 2.2中,即使默认情况下API返回的对象属性是驼峰式的,也不例外。
我尝试过(在Startup.cs中):
HttpConfiguration
但是没有运气。我还检查了services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
options.UseCamelCasing(true);
})
,并确认OutputFormatters
已经拥有JsonOutputFormatter
作为其ContractResolver。无论如何,我都尝试过,但除此之外,结果没有变化:
CamelCasePropertyNamesContractResolver
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。