我有您的典型API路由,但是我仍然需要它返回它正在使用的Ok JSON blob,但是我需要将HttpStatusCode指定为不同的东西。
下面是API方法。
[Route("detailedvarinfo/{VarGUID}")]
public async Task<IHttpActionResult> GetDetailedVarInfo(string VarGUID)
{
if (!User.IsInRole("Admin"))
{
var DashboardAccess = (from DR in AuthDb.DashboardAccessVars
where DR.ApplicationUser.Id == userInfo.Id
select DR).
AsEnumerable()
.Select(x => new
{
VarGUID = x.VarGUID
}).ToList();
var FilteredVarInfo = VarInfo.Join(DashboardAccess, x => x.VarGUID, y => y.VarGUID, (x, y) => x);
if (FilteredVarInfo.Any())
{
return Ok(FilteredVarInfo.FirstOrDefault());
}
else
{
return Ok(HttpStatusCode.Forbidden);
}
}
}
我试图实现这一点,但没有任何运气。对于非OK响应,返回带有IHttpActionResult的内容
也尝试过做这样的事情..但是没有任何运气。
public class NotAllowedOkResult<T> : OkNegotiatedContentResult<T>
{
public NotAllowedOkResult(T content, ApiController controller, HttpStatusCode statusCode)
: base(content, controller)
{
}
public NotAllowedOkResult(T content, IContentNegotiator contentNegotiator, HttpRequestMessage request,
IEnumerable<MediaTypeFormatter> formatters, HttpStatusCode statusCode)
: base(content, contentNegotiator, request, formatters)
{
}
public override async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response = await base.ExecuteAsync(cancellationToken);
return response;
}
}
您可以使用HttpResponseMessage来自定义响应。
HttpResponseMessage msg=new HttpResponseMessage(HttpStatusCode.OK);
msg.ReasonPhrase="Filterd";
return msg;
让它工作!真的很接近,需要做更多的工作。
接口方法
[Route("detailedvarinfo/{VarGUID}")]
public async Task<IHttpActionResult> GetDetailedVarInfo(string VarGUID)
{
if (!User.IsInRole("Admin"))
{
var DashboardAccess = (from DR in AuthDb.DashboardAccessVars
where DR.ApplicationUser.Id == userInfo.Id
select DR).
AsEnumerable()
.Select(x => new
{
VarGUID = x.VarGUID
}).ToList();
var FilteredVarInfo = VarInfo.Join(DashboardAccess, x => x.VarGUID, y => y.VarGUID, (x, y) => x);
if (FilteredVarInfo.Any())
{
return Ok(FilteredVarInfo.FirstOrDefault());
}
else
{
return NotAllowedOk(FilteredVarInfo, StatusReason.StatusFiltered);
}
}
}
BaseApiController : ApiController
protected internal virtual NotAllowedOkResult<T> NotAllowedOk<T>(T content, StatusReason statusReason)
{
return new NotAllowedOkResult<T>(content, this, statusReason);
}
状态原因枚举
public enum StatusReason
{
StatusFiltered
}
NotAllowedOkResult类
public class NotAllowedOkResult<T> : OkNegotiatedContentResult<T>
{
public NotAllowedOkResult(T content, ApiController controller, StatusReason statusReason)
: base(content, controller)
{
statusReasonCode = statusReason;
}
public NotAllowedOkResult(T content, IContentNegotiator contentNegotiator, HttpRequestMessage request,
IEnumerable<MediaTypeFormatter> formatters, StatusReason statusReason)
: base(content, contentNegotiator, request, formatters)
{
statusReasonCode = statusReason;
}
protected StatusReason statusReasonCode { get; set; }
public override async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response = await base.ExecuteAsync(cancellationToken);
response.ReasonPhrase = GetStatusText(statusReasonCode);
return response;
}
private static String GetStatusText(StatusReason reasonCode)
{
var retVal = "Unknown";
switch (reasonCode)
{
case StatusReason.StatusFiltered:
retVal = "Filtered";
break;
}
return retVal;
}
}
Javascript结果
varService.getDetailedJobInfo($stateParams.varGUID).then(function(results) {
$scope.varDetails = results.data;
return results;
}, function (error) {
//alert(error.data.message);
});
//
// Actual result comes back properly!
//
results = {
content: datablob,
status: 200,
statusText: "Filtered",
config: datablob
}
我已经探索了很多,我发现在所有活动中,我们需要指定android:导出参数。我已经在清单中的所有活动中添加了参数,但我仍然收到此错误。 清单合并失败:android:需要为显式指定导出
我已经检查了清单中的所有活动。xml文件中,所有活动都存在android:exported=“true”,但它始终显示此错误**清单合并失败:需要为元素显式指定android:exported 我的清单文件是 Gradle构建 等待早期响应
当我从升级到时,我收到了这个错误。 错误 清单合并失败:android:导出需要显式指定。当相应组件定义了意图过滤器时,面向Android 12及更高版本的应用需要为指定显式值。有关详细信息,请参阅https://developer.android.com/guide/topics/manifest/activity-element#exported。
当我将目标和编译SDK版本从30更改为31时,我得到一个错误。类似于这个问题,但没有答案。 错误:android:导出需要显式指定。针对Android 12及更高版本的应用程序需要指定一个显式值为时,相应的组件定义了一个意图过滤器。详见https://developer.android.com/guide/topics/manifest/activity-element#exported。 但是,
像这段代码一样,C编译器将把char*转换为bool,然后调用第一个函数,这与我的初衷不一致。有没有办法阻止编译器执行我不想要的类型转换?比如“-fno permissive”,但不幸的是,它不起作用。
我试图实现分页和排序的HTTP请求使用Spring的分页。一切正常,除了我想明确声明可排序的属性,即资源属性,,。默认实现允许用户调用HTTP请求和排序结果的所有属性。但是,我想限制排序仅列和。 下面是我当前代码的示例 显而易见的解决方案是从可分页对象中检索排序对象,并像这样手动验证属性 } 我的问题是,在Spring中是否存在一种仅通过显式定义的属性进行排序的更简单方法。