【发布时间】:2020-03-14 02:02:29
【问题描述】:
如何在 MVC WebApi 中使用自定义响应消息更改默认响应消息?
{ "Message": "Authorization has been denied for this request." }
提前致谢
这是我的自定义响应模型
public class DefaultResponseModel<T>
{
public string ResponseID { get; private set; }
public DateTimeOffset ResponseDateTime { get; private set; }
public string RequestMethod { get; private set; }
public string IPAddress { get; private set; }
public T Data { get; set; }
public DefaultResponseModel(ApiController controller)
{
ResponseDateTime = DateTimeOffset.Now;
RequestMethod = controller.Request.Method.ToString();
if (controller.Request.Properties.ContainsKey("MS_HttpContext"))
{
var ctx = controller.Request.Properties["MS_HttpContext"] as HttpContextBase;
if (ctx != null)
{
IPAddress = ctx.Request.UserHostAddress;
}
else
{
IPAddress = "--";
}
}
ResponseID = controller.Request.Properties.FirstOrDefault(x => x.Key == "RequestID").Value.ToString();
}
public DefaultResponseModel(HttpRequestMessage Request)
{
ResponseDateTime = DateTimeOffset.Now;
RequestMethod = Request.Method.ToString();
if (Request.Properties.ContainsKey("MS_HttpContext"))
{
var ctx = Request.Properties["MS_HttpContext"] as HttpContextBase;
if (ctx != null)
{
IPAddress = ctx.Request.UserHostAddress;
}
else
{
IPAddress = "--";
}
}
ResponseID = Request.Properties.FirstOrDefault(x => x.Key == "RequestID").Value.ToString();
}
如您所说,我想在授权代码中使用它,因为我生成了一个 ResponseID 并将其发送到我的响应模型。 我想对每个响应使用相同的模型。
【问题讨论】:
-
好的,那你为什么不在自定义授权属性中登录呢?
-
但是我能找到在授权响应中使用我的自定义模型的方法吗?
-
我不明白您所说的“授权响应”是什么意思。发送的响应是 403。如果您的意思是在授权属性完成后希望另一个组件执行某些操作,那么您可能需要另一个操作过滤器属性或 HTTP 模块。请参阅stackoverflow.com/questions/11507496/… 以获得帮助。
-
如果可能的话,我只想用我的自定义类模型修改默认响应消息 ({ "Message": "Authorization has been denied for this request." })..
-
现在我很困惑。我的回答向您展示了如何设置响应消息。如果您想使用您的对象,请在
HandleUnauthorizedRequest方法中使用。您是否尝试将您的ResponseID放入消息中?
标签: c# asp.net-mvc asp.net-web-api model-view-controller authorization